标题:面试题04.06.后继者-中等
题目
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
如果指定节点没有对应的“下一个”节点,则返回
null
。
示例1
输入: root = [2,1,3], p = 1
2
/ \
1 3
输出: 2
示例2
输入: root = [5,3,6,2,4,null,null,1], p = 6
5
/ \
3 6
/ \
2 4
/
1
输出: null
代码Go
var (
ans *TreeNode = nil
pre *TreeNode = nil
cur *TreeNode = nil
)
func inorderSuccessor(root *TreeNode, p *TreeNode) *TreeNode {
ans = nil
pre = nil
cur = nil
inorder(root, p)
return ans
}
func inorder(root *TreeNode, p *TreeNode) {
if root == nil {
return
}
inorder(root.Left, p)
pre = cur
cur = root
if pre != nil && pre.Val == p.Val {
ans = cur
}
inorder(root.Right, p)
}