总结规律法:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
首先中序遍历的话。应该是左中右:
总结下规律:
1.有右子树的,那么下个结点就是右子树最左边的点;
2.是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点
3.是父节点的右孩子(eg:H,J,K,M)找他的父节点的父节点的父节点…直到当前结点是其父节点的左孩子位置
二和三是合并的,也就是等同于:节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。
class Solution:
def GetNext(self, pNode):
if pNode is None:
return None
#1.有右子树的,那么下个结点就是右子树最左边的点;
if pNode.right:
left_point = pNode.right
while left_point.left:
left_point = left_point.left
return left_point
#2.是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点
#3.是父节点的右孩子(eg:H,J,K,M)找他的父节点的父节点的父节点...直到当前结点是其父节点的左孩子位置
while pNode.next:
father = pNode.next
if father.left == pNode:
return father
else :
pNode = father
return None