其他分享
首页 > 其他分享> > Leetcode每日一题:22/05/16:面试题04.06:后继者

Leetcode每日一题:22/05/16:面试题04.06:后继者

作者:互联网

设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null

思路:二叉搜索树中序遍历有序,因此:中序后继节点,也就是比它大的最小的一个节点,

class Solution {
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
        TreeNode parent = null, node = root;
        if (node == null) {
            return null;
        }
        while (node != null) {
            if (node.val > p.val) {//当前节点值大于指定节点值,说明指定节点在当前节点的左子树中
                parent = node;//parent为左子树父节点
                node = node.left;//进入左子树
            } else if (node.val < p.val) {//当前节点值小于指定节点值,说明指定节点在当前节点的右子树中
                node = node.right;//进入右子树
            } else if (node.right != null) {//此时node.val=p.val,若右子树非空,则进入右子树
                node = node.right;
                while (node.left != null) {//找到右子树中最左叶子节点
                    node = node.left;
                }
                return node;
            } else {//node.val = p.val且右子树为空
                return parent;
            }
        }
        return parent;
    }
}

标签:node,面试题,val,22,16,右子,parent,null,节点
来源: https://www.cnblogs.com/blogma/p/16276436.html