树中两个节点的最低公共祖先节点
递归的解法如下:
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;
}
树中两个节点的最低公共祖先节点相关推荐
- 50:树中两个结点的最低公共祖先
题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...
- 寻找树中两个结点的最低公共祖先
寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...
- 树中两个结点的最低公共祖先
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 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 ...
- 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现
最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...
- 求一颗二叉树中两个节点的最低公共父节点
题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...
- 求二叉树中任意两个节点的最近公共祖先节点
思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...
- 树如何找共同祖先_如何找到任何二叉树中两个节点的最低公共祖先?
小编典典 尼克·约翰逊是正确的,一个一个O(n)的时间复杂度算法是最好的,如果你没有父指针,你可以做.)对于算法的一个简单的递归版本中看到代码金丁的职务)它运行在O(n)的时间. 但是请记住,如果您的 ...
- 程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)
这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...
- 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案
牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...
最新文章
- Codeforces Gym 100650B 	Countdown (离线)
- zen cart 操作-修改
- 机房系统(六)——【下机】
- 05 state与setState、单向数据流
- 科普帖:什么是服务网格?
- WPF:WPF显示PDF文档
- java web试题_Java web开发经典面试题汇总(内附答案详解)
- python中的元类_理解python中的元类
- IMP 导入数据报错 OCI-21500 OCI-22275
- python概率密度函数参数估计_概率密度估计介绍
- 计算机cpu和内存不足,电脑内存不足的解决方法
- oracle 对表重建索引,oracle 重建索引方法 分析
- idea 关闭检查更新_intellij idea怎么关闭自动更新
- 《数据库原理与应用》习题
- 判断语句——switch case
- 从零入门机器学习之开宗明义:编程与数据思维
- C语言打印某一年的全部日历(两行日历形式)
- c++primer 第二章 变量和基本类型
- 安卓机器人做图软件_机器人管理与开发软件RoboStudio出安卓版本啦~
- IntelliJ IDEA的安装及插件下载