关闭

二叉树最低公共父节点

152人阅读 评论(0) 收藏 举报
分类:

如果给定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;
    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23169次
    • 积分:1023
    • 等级:
    • 排名:千里之外
    • 原创:82篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类