劍指offer25.二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2019-01-12
題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
給個圖就好理解一點題目了:
二叉樹的left,right分別代表左右子樹,雙向連結串列中的left,right分別代表左指標和右指標。要對二叉搜尋樹進行排序,第一個想到的就是中序遍歷。對於連結串列,用res表示頭,flag表示要修改的節點,最後返回res就好,詳見 這裡:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pRootOfTree):
# write code here
self.res, self.flag = None, None
self.convert(pRootOfTree)
return self.res
def convert(self, root):
if not root:
return None
self.convert(root.left)
if self.res == None:
self.res, self.flag = root, root
else:
self.flag.right = root
root.left = self.flag
self. flag = root
self.convert(root.right)