题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
如果有右子树,则下一个结点为右子树最左结点
如果没有右子树:
1. 如果该结点为父结点的左结点,返回父结点
2. 如果该结点为父结点的右结点,向上寻找,找到一个结点的父结点左结点为该结点,返回这个结点的父结点,如果找不到返回空
代码:
class Solution:
def GetNext(self, pNode):
# write code here
if not pNode:
return None
elif pNode.right:
cur = pNode.right
while cur.left:
cur = cur.left
return cur
elif pNode.next and pNode.next.left == pNode:
return pNode.next
else:
cur = pNode.next
while cur and cur.next:
if cur.next.left == cur:
return cur.next
cur = cur.next
return None