zengzhen_CSDN的博客

不积跬步,无以至千里;不积小流,无以成江海。

二叉树最低公共父节点

如果给定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;
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zengzhen_CSDN/article/details/52345705
个人分类: DataStructure&Algorithm
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭