题目描述
给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。
注意:
- 如果给定的节点是中序遍历序列的最后一个,则返回空节点;
- 二叉树一定不为空,且给定的节点一定不是空节点;
样例:
假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。
则应返回值等于3的节点。
思路
分三种情况讨论:
- 给定节点有右子树,则其下一个节点为该节点右子树的最左孩子节点
- 给定节点无右子树,且给定节点为左孩子节点,则其下一个节点为该节点的父亲节点
- 给定节点无右子树,且给定节点为右孩子节点,则沿着给定节点的父亲节点一直往上找,最后的父亲节点为该节点的下一个节点
代码实现(Python)
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
self.father = None
class Solution(object):
def inorderSuccessor(self, p):
"""
:type p: TreeNode
:rtype: TreeNode
"""
if p.right is not None: # 1、有右子树
p = p.right # p指向p的右子树
while p.left is not None:
p = p.left # 找右树的最左儿子
return p
else: # 无右子树
while p.father is not None:
if p == p.father.left: # 2、无右子树且为左儿子
return p.father
else: # 3、无右子树且为右儿子
p = p.father
return None