给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
1 # -*- coding:utf-8 -*- 2 # class TreeLinkNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 # self.next = None 8 class Solution: 9 def GetNext(self, pNode): 10 if pNode.right != None: 11 node = pNode.right 12 while node.left: 13 node = node.left 14 return node 15 else: 16 while pNode.next: 17 parent = pNode.next 18 if parent.left == pNode: 19 return parent 20 pNode = pNode.next 21 # write code here
思路分析:
1.如果一个节点的右子树不为空,那么该节点的下一个节点是:此节点的右子树的最左节点,返回这个左节点。
2.否则(右子树为空),该节点c的下一个节点是:向上查找c的父节点p,并且满足c恰好是p的左孩子,返回p节点。