題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
思路
根節點將left連接到左子樹的最右節點,
將right連接到右子樹的最左節點
需要注意的是,我們要返回的是頭節點,即最左邊的節點,所以遞歸返回的是最左邊的節點
右子樹的最左邊節點和根節點之間可以互相連接,但是左子樹需要找到最右,並且當leftNode為空時,返回的應該是根節點本身
下面看代碼
1 class Solution: 2 def Convert(self, pRootOfTree): 3 # write code here 4 if pRootOfTree == None: 5 return None 6 def find_right(node): 7 while node.right: 8 node=node.right 9 return node 10 11 leftNode = self.Convert(pRootOfTree.left) 12 rightNode = self.Convert(pRootOfTree.right) 13 14 retNode = leftNode 15 if leftNode: 16 leftNode = find_right(leftNode) 17 else: 18 retNode = pRootOfTree 19 20 pRootOfTree.left = leftNode 21 pRootOfTree.right = rightNode 22 23 if leftNode !=None : 24 leftNode.right = pRootOfTree 25 if rightNode !=None: 26 rightNode.left = pRootOfTree 27 return retNode
2019-12-17 16:40:17