題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
模擬題,考慮幾種情況:
1.首先最容易解決的情況當然是,噹噹前結點存在右子樹時,直接返回右邊結點
當有邊界點存在左子樹時,遍歷到右子樹的左子樹葉,即下一個結點。
2.其次情況,當前結點不存在右子樹時,只能向上回溯,而向上回溯時又分爲兩種情況:
當是從左子樹回溯時,可以直接返回其父節點
當是從右子樹回溯時,其父節點並不是下一個結點,必須繼續向上回溯,回溯的過程中,若遇到相同情況,繼續回溯,若遇到某個父節點存在右子樹,執行第一種情況的解決方法。
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
def GetNext(self, pNode):
# write code here
if pNode.right!=None:
pNode=pNode.right
while pNode.left!=None:
pNode=pNode.left
return pNode
while pNode.next!=None:
fa=pNode.next
if fa.left==pNode:
return fa
if fa.right!=None and fa.right!=pNode:
pNode=fa.right
while pNode.left!=None:
pNode=pNode.left
return pNode
pNode=fa
return None