劍指offer41 — 二叉樹的下一個結點
題目
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
分析
中序遍歷即爲左中右的順序。將結點分爲兩種情況,有右子樹的情況以及沒有右子樹的情況。
- 尋找右子樹,如果存在就一直找到右子樹的左子樹,就是輸出的下一個結點
- 沒有右子樹,就尋找他的父節點,一直找到它是父節點的左子樹的時候,打印該左子樹結點。
代碼
# -*- 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