题目描述:
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示
示例:
输入:{8,6,10,5,7,9,11},8
返回:9
解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9,如下图,其实都有指向左右孩子的指针,还有指向父节点的指针,下图没有画出来
解题思路:
存在三种结点:
若该节点有右子树,则该结点的下一个结点为其右子树的最左节点;
若该节点没有右子树,且该结点是其父节点的左孩子,则该节点的下一个节点是其父节点;
若该结点没有右子树,则一直在其父节点的方向上寻找,直到找到其父节点的左子树,这个节点的父节点就是要找的结点。
python代码实现:
class Solution:
def GetNext(self, pNode):
# write code here
if pNode==None:
return None
if pNode.right:
pNode=pNode.right
while pNode.left:
pNode=pNode.left
return pNode
if pNode.next and pNode.next.left==pNode:
return pNode.next
else:
while pNode.next:
if pNode.next.left==pNode:
return pNode.next
pNode=pNode.next
return None