【面試題8】二叉樹的下一個節點

在這裏插入圖片描述
Python解法
思路:腦中構造出一個樹。
1.左子樹爲父節點;
2.如果一個節點有右子樹,下一個節點爲右子樹的最左結點;
3.如果一個節點無右子樹,且爲父節點的左子結點,下一個節點爲父節點;
4.如果爲父節點的右子節點,向上遍歷直到找到其是父節點左子節點的結點

# -*- 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):
        if not pNode:return None
        nxt = None
        if pNode.right:#有右子樹
            right = pNode.right
            while right.left:
                right = right.left
            nxt = right
        elif pNode.next:#①爲父節點左子樹;無右子樹:②父節點爲爺爺結點左;③父節點爲爺爺結點右,繼續遍歷
            cur = pNode
            par = pNode.next
            while par and cur == par.right:#情況③,其餘直接爲父節點
                cur = par
                par = par.next
            nxt = par
        return nxt

考查

  • 考查對二叉樹中序遍歷的理解程度;
  • 考查分析複雜問題的能力。通過畫出二叉樹的結構圖、通過具體的例子找出中序遍歷下一個節點的規律,纔有可能設計出可行的算法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章