二叉树最低公共父节点

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

满排序二叉树任意三个节点最低公共父节点

#include using namespace std; int tree[1024*1024]; int k; int a,b,c; int power2(int n) { int i...

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

1、二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct...

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

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

寻找二叉树两个结点的最低共同父节点(2014京东笔试题)

寻找二叉树两个结点的最低共同父节点1.使用递归的思想(从根节点自上向下查找,优点直观易懂,缺点使用较大内存);2.使用迭代的思想(从两目标节点自下向上查找,缺点运行较长时间,改进:可以牺牲内存记录找过...

寻找二叉树两个结点的最低共同父节点

寻找二叉树两个结点的最低共同父节点 题目:二叉树的结点的定义如下: struct TreeNode { int m_nValue; TreeNode *m_p...

二叉树最近公共父节点

#include using namespace std; struct TreeNode { int val; TreeNode*left; TreeNode*right;...

算法题16 二叉树最近公共父节点

找寻二叉树中两个节点的公共父节点中最近的那个节点 情况1. 节点只有left/right,没有parent指针,root已知 解析:对于此种情形,只需找到两个节点到根节点的路径,然后就相当于两个链...
  • wcyoot
  • wcyoot
  • 2011年05月17日 15:55
  • 4062

二叉树--最近公共父节点

给定二叉树中的任意两点,求解该两点的最近公共父节点。程序大致分为递归和非递归两种方式,下面我们先来认识非递归的方式。非递归程序总体的思路:用一种常见高效的数据结构来记录下二叉树中的结构关系,由于是找父...

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

方法 下面是一个简单的复杂度为 O(n) 的算法,解决LCA问题 1) 找到从根到n1的路径,并存储在一个向量或数组中。 2)找到从根到n2的路径,并存储在一个向量或数组中。 3) 遍历这...

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

给定一棵树,同时给出树中的两个结点(n1和n2),求它们的最低公共祖先。也就是常见的LCA(Lowest Common Ancestor )问题 方法一 下面是一个简单的复杂度为 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树最低公共父节点
举报原因:
原因补充:

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