二叉树的下一个节点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

 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节点。

posted on 2019-06-13 14:53  Sempron2800+  阅读(118)  评论(0编辑  收藏  举报