26.二叉搜索樹與雙向鏈表


題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。

思路

根節點將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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM