递归的解法如下:
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null||root==p||root==q)
            return root;
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
        if (left == null) 
            return right;
        if (right == null) 
            return left;
        return root;
    }

迭代解法如下:

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {  
        if(root==null || p==null || q==null) 
            return null;
        List<TreeNode> pathp = new ArrayList<>();  
        List<TreeNode> pathq = new ArrayList<>();  
        pathp.add(root);  
        pathq.add(root);  
          
        getPath(root, p, pathp);  
        getPath(root, q, pathq);  
          
        TreeNode lca = null;  
        for(int i=0; i<pathp.size() && i<pathq.size(); i++) {  
            if(pathp.get(i) == pathq.get(i)) 
                lca = pathp.get(i);  
            else 
                break;  
        }  
        return lca;  
    }  
      
    private boolean getPath(TreeNode root, TreeNode n, List<TreeNode> path) {  
        if(root==n)   
            return true;  
        
        if(root.left!=null) {  
            path.add(root.left);  
            if(getPath(root.left, n, path))
                return true;  
            path.remove(path.size()-1);  
        }  
          
        if(root.right!=null) {  
            path.add(root.right);  
            if(getPath(root.right, n, path)) 
                return true;  
            path.remove(path.size()-1);  
        }  
        return false;  
    }

树中两个节点的最低公共祖先节点相关推荐

  1. 50:树中两个结点的最低公共祖先

    题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...

  2. 寻找树中两个结点的最低公共祖先

    寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...

  3. 树中两个结点的最低公共祖先

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  4. Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)

    题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...

  5. 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现

    最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...

  6. 求一颗二叉树中两个节点的最低公共父节点

    题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...

  7. 求二叉树中任意两个节点的最近公共祖先节点

    思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...

  8. 树如何找共同祖先_如何找到任何二叉树中两个节点的最低公共祖先?

    小编典典 尼克·约翰逊是正确的,一个一个O(n)的时间复杂度算法是最好的,如果你没有父指针,你可以做.)对于算法的一个简单的递归版本中看到代码金丁的职务)它运行在O(n)的时间. 但是请记住,如果您的 ...

  9. 程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)

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

  10. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

最新文章

  1. Codeforces Gym 100650B Countdown (离线)
  2. zen cart 操作-修改
  3. 机房系统(六)——【下机】
  4. 05 state与setState、单向数据流
  5. 科普帖:什么是服务网格?
  6. WPF:WPF显示PDF文档
  7. java web试题_Java web开发经典面试题汇总(内附答案详解)
  8. python中的元类_理解python中的元类
  9. IMP 导入数据报错 OCI-21500 OCI-22275
  10. python概率密度函数参数估计_概率密度估计介绍
  11. 计算机cpu和内存不足,电脑内存不足的解决方法
  12. oracle 对表重建索引,oracle 重建索引方法 分析
  13. idea 关闭检查更新_intellij idea怎么关闭自动更新
  14. 《数据库原理与应用》习题
  15. 判断语句——switch case
  16. 从零入门机器学习之开宗明义:编程与数据思维
  17. C语言打印某一年的全部日历(两行日历形式)
  18. c++primer 第二章 变量和基本类型
  19. 安卓机器人做图软件_机器人管理与开发软件RoboStudio出安卓版本啦~
  20. IntelliJ IDEA的安装及插件下载

热门文章

  1. 管理员取得所有权限.reg
  2. 微服务下flask和celery的通信
  3. 分布式本质论:高吞吐、高可用、可扩展 (1)
  4. jetty client 与apache http client的实现、分析
  5. Spring的ioc底层原理和简单实例
  6. 双重控制门锁程序_智能化发展趋势下,智能门锁如何获得市场青睐?
  7. STC学习:八位数码管+流水灯
  8. Linux学习笔记3 - 目录和文件管理
  9. Eclipse+OpenCV3.1.0 的环境搭建
  10. ffmpeg libx264_FFmpeg之FFmpeg模块介绍(一)