【劍指offer】二叉樹的下一個結點(模擬)

題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

模擬題,考慮幾種情況:
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章