二叉树最低公共父节点

如果给定root是null,即空树,则返回的公共节点自然就是null;

如果给定root与两个节点中任何一个相同,说明,root在就是所要找的两个节点之一,则直接返回root,表明在当前链路中找到至少一个节点;

如果给定root不是两个节点中任何一个,则说明,需要在root的左右子树中重新查找。

此时有三种情况:
两个节点都在左子树上;个节点都在右子树上;一个在左子树,一个在右子树上。

具体来说,就是:

情况一:如果左子树查找出的公共节点是null,则表明从左子树根节点开始到左子树的所有叶子节点等所有节点中,没有找到两个节点中的任何一个,这就说明,这两个节点不在左子树上,不在左子树,则必定在右子树上;

情况二:如果右子树查找的公共节点是null,说明在右子树中无法找到任何一个节点,则两个节点必定在左子树上;

情况三: 如果左右子树查找的公共节点都不是null,说明左右子树中各包含一个节点,则当前节点root就是最低公共节点,返回就可以了。

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
}

TreeNode lastCommonParent(TreeNode root, TreeNode node1, TreeNode node2){
        if(root == null)
            return null;
        if(root == node1 || root == node2)
            return root;
        TreeNode left = lastCommonParent(root.left, node1, node2);
        TreeNode right = lastCommonParent(root.right, node1, node2);
        if(left == null)
            return right;
        else if(right == null)
            return left;
        else
            return root;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值