题目描述:二叉树的中序遍历下一个节点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析:见树头疼系列。
画图看看。中序是:左根右。画一个树,考虑几个给定的点的特殊位置,继而不断写完整函数。
# 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 pNode == None:
return None
if pNode.right: # 右子树存在
pre = pNode.right # 锁定右子树
while pre.left: # 使用循环,找锁定的右子树的根节点的最下层左子树
pre = pre.left
return pre # 循环结束后,最左的就是目标
while pNode.next: # 右子树不存在
parent = pNode.next # 锁定这个节点的父节点
if parent.left == pNode:# 如果给定节点是其父节点的左子树
return parent # 那么其父节点就是目标
pNode = parent # 如果给定节点是其父节点的右子树,就往上层迭代,新一轮循环
return None # 如果到顶了:不满足循环条件。说明,他没有下一节点了
我现在现写也写不出来。尴尬。