题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:题目说是中序遍历的下一个结点,就分为两种情况:
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:
p= pNode.right
while p.left:
p = p.left
return p
#没有右子树的时候,找到第一个当前结点是父节点的左节点的父节点。
while pNode.next:
if pNode.next.left == pNode:
return pNode.next
pNode = pNode.next