劍指offer41 --- 二叉樹的下一個結點

劍指offer41 — 二叉樹的下一個結點

題目

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

分析

在這裏插入圖片描述
在這裏插入圖片描述

中序遍歷即爲左中右的順序。將結點分爲兩種情況,有右子樹的情況以及沒有右子樹的情況。

  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:
            tmpNode = pNode.right
            while tmpNode.left:
                tmpNode = tmpNode.left
            return tmpNode
        else:
            tmpNode = pNode
            while tmpNode.next:
                if tmpNode.next.left == tmpNode:
                    return tmpNode.next
                tmpNode = tmpNode.next
            return None
                
           

牛客網 — 二叉樹的下一個結點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章