题目:给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。
注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;
-------------------------------------------------------------------------------------------
解析:
1.如果节点有右子树,那么下一个节点为右子树中的最左节点;
2.如果节点是父节点的左子节点,那么父节点就是下一个节点;
3.如果节点是父节点的右子节点,沿着父节点向上遍历找到祖先节点中,为父节点左子节点的点,这个左子节点的父节点就是下一个节点。
例如:
1.比如当前节点是D,则第一个满足是其father左儿子的节点是F,则C的father就是D的后继,即F是D的后继。
代码:
def getnext(node):
if not node:
return None
if node.right:
next_node = node.right
while next_node.left:
next_node = next_node.left
return next_node
while node.next:
parent = node.next
if parent.left == node:
return parent
node = parent
return None