二叉樹查找后繼節點(即中序遍歷情況下的這個節點的下一個) Python實現


1.若節點類型沒有parent屬性,采用中序遍歷方式獲取后繼節點

 1 def getSuccessorNode(head, node):
 2     if (not node) or (not head):
 3         return None
 4     stack = []
 5     flag = False
 6     while head or len(stack) > 0:
 7         if head:
 8             stack.append(head)
 9             head = head.left
10         else:
11             head = stack.pop()
12             if flag:
13                 return head
14             if head == node:            # 若找到當前節點,則下一個彈出的節點即為后繼節點
15                 flag = True
16             head = head.right
17     return None

2.若節點存在parent屬性即

 1 class TreeNode:
 2     def __init__(self, x=0):
 3         self.val = x
 4         self.parent = None
 5         self.left = None
 6         self.right = None
 7 
 8 
 9 def getSuccessorNode(node):
10     if not node :
11         return None
12     if node.right:               # 如果當前節點有右子樹,則返回右子樹的最左邊節點
13         node = node.right
14         while node.left:
15             node = node.left
16         return node
17     else:                        # 沒有右子樹   則向上找尋父節點,直到為父節點的左子樹,返回父節點,否則返回空
18         par = node.parent
19         while not par and par.left != node:
20             node = par
21             par = par.parent
22         return par

 


免責聲明!

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



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