1. 程式人生 > >劍指offer25.二叉搜尋樹與雙向連結串列

劍指offer25.二叉搜尋樹與雙向連結串列

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

給個圖就好理解一點題目了:
在這裡插入圖片描述
二叉樹的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)