二叉树最低公共父节点

原创 2016年08月28日 14:56:49

如果给定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;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

二叉树中两节点的最低公共父节点。

找两个节点的最低公共父节点,也即找到一个节点,使其左、右子树分别包含所要找的两个节点。如下图: ___________3______ / \ ...
  • sdlyjzh
  • sdlyjzh
  • 2013年11月24日 19:15
  • 1199

二叉树(12)----查找两个节点最低祖先节点(或最近公共父节点等),递归和非递归

1、二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct...
  • beitiandijun
  • beitiandijun
  • 2014年12月16日 23:37
  • 7827

找出二叉树中任意两个节点的最低公共父节点

如图中H和F的最低公共祖先节点就是A 解法1: 遍历出所有叶节点到根节点的路径,得到 ABD ABEH ACFI ACG 可以发现要找出H和F的最低祖先节点只要找到任意一条包含F和任意一条一条H的字符...
  • u010916254
  • u010916254
  • 2015年11月12日 14:22
  • 1466

二叉树最近公共父节点

找二叉树的最近公共父结点。有父结点指针时,容易找。没有父结点指针时,一种算法时间复杂度为O(N^2),一种算法时间复杂度为O(N)。...
  • KangRoger
  • KangRoger
  • 2014年10月24日 16:45
  • 6949

LCA-最小公共父节点

有一个普通二叉树,AB分别为两个子节点,求AB最近(深度最浅)的公共父节点。 此题仍然是一个老题,有着多种解决方法,本文针对其中三种方法来进行分析总结。 这三种方法分别是:递归法,tarjan离线...
  • zhaoyunfullmetal
  • zhaoyunfullmetal
  • 2015年07月19日 10:37
  • 1488

二叉树中查找两个节点的最低公共祖先

这是一道企业面试中,经常会被问到的面试题目。 在网上看到一些此题的实现,其中有两种方法是比较适合编程的。本项目的源代码,请点击这里下载。 方法一:   此方法是根据二叉树的DFS查找并标记祖先,...
  • fy2462
  • fy2462
  • 2014年06月17日 14:24
  • 2248

二叉树的每个节点都有父节点引用的,找寻该二叉树中两个节点最近的公共父节点

很流行的一个问题,常见于各种面试中,http://fayaa.com/tiku/view/16/ 这里有一个很好的汇总.找寻二叉树中两个节点的公共父节点中最近的那个节点 情况1. 节点只有left/r...
  • yangkele
  • yangkele
  • 2011年05月06日 13:52
  • 1342

程序员面试100题之十六:二叉树中两个节点的最近公共父节点

这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,...
  • Hackbuteer1
  • Hackbuteer1
  • 2012年09月26日 19:30
  • 17215

二叉树中2个节点的最小公共父节点

关于如何求二叉树2个节点的最小公共父节点,分2种情况讨论 情况1:节点有parent节点            这种情况就直接找到节点1和节点2的根节点,然后求得2个链表的长度,再求得长度差。如果说2...
  • wengsy_5041
  • wengsy_5041
  • 2017年01月19日 15:17
  • 1250

二叉树中任意两节点的最低共同父节点

通过两个和二叉树相关的算法题来看看和递归在二叉树中的应用 输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。 思路: 如果这两个节点不在同一个子树下面,那么这棵树的根节点就是他们的共...
  • yusiguyuan
  • yusiguyuan
  • 2015年01月05日 14:34
  • 2510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树最低公共父节点
举报原因:
原因补充:

(最多只允许输入30个字)