题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
# -*- 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==None:
return None
if pNode.right!=None:
node=pNode.right
while node.left!=None:
node=node.left
return node
else:
while pNode.next!=None:
if pNode.next.left==pNode:
return pNode.next
pNode=pNode.next
return None
中序遍历的顺序是左中右,下一个结点有以下两种情况:
1.pNode有右结点,我们想中序遍历当遍历pNode后,会进入右子树并从右子树的左孩子开始遍历,所以进入右子树后,一直向左找到左孩子。
2.pNode没有右节点,这种情况比较复杂。如果没有右孩子,那么说明pNode为根的子树遍历完了,要找它的父节点。如果pNode.next.left==pNode,也就是它的父节点的左孩子就是它,那么按照中序排序左中右的顺序,下一个结点就是父节点。如果不是,那么说明pNode是它父亲的右节点,那就接着找它的父节点直到出现之前的情况。