📅  最后修改于: 2023-12-03 15:12:40.739000             🧑  作者: Mango
给定一个根据二叉查找树中序遍历得到的节点值的下一个节点值,寻找这个节点在中序遍历中的下一个节点值。
假设二叉查找树中每个节点都有一个不同的后继。
例如,参见下图。
上述二叉查找树中,中序遍历为 D, B, E, A, F, C 和给定的节点为“C”,则返回“E”。
以下是该问题的形式化描述:
函数签名如下:
def inorderSuccessor(root, x):
pass
输入参数:
输出参数:
输入:
root = Node(20)
root.left = Node(8);
root.right = Node(22);
root.left.left = Node(4);
root.left.right = Node(12);
root.left.right.left = Node(10);
root.left.right.right = Node(14);
x = root.left.right;
输出:
14
输入:
root = Node(20)
root.left = Node(8);
root.right = Node(22);
root.left.left = Node(4);
root.left.right = Node(12);
root.left.right.left = Node(10);
root.left.right.right = Node(14);
x = root.left.left;
输出:
8
本题可以通过遍历二叉查找树来寻找“x”的后继,具体思路如下:
以下是具体实现,核心代码块只要40多行,用来解决这个问题非常方便。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderSuccessor(self, root: 'TreeNode', p: 'TreeNode') -> 'TreeNode':
succ = None
while root:
if p.val < root.val:
succ = root
root = root.left
else:
root = root.right
return succ