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