二叉树中找到俩个节点的最低公共祖先
来源:互联网 发布:全球云计算开源大会 编辑:程序博客网 时间:2024/06/05 03:25
方法一
下面是一个简单的复杂度为 O(n) 的算法,解决LCA问题
1) 找到从根到n1的路径,并存储在一个向量或数组中。
2)找到从根到n2的路径,并存储在一个向量或数组中。
3) 遍历这两条路径,直到遇到一个不同的节点,则前面的那个即为最低公共祖先.
方法二 (不利用额外空间,一次遍历)
从root开始遍历,如果n1和n2中的任一个和root匹配,那么root就是LCA。 如果都不匹配,则分别递归左、右子树,如果有一个 key(n1或n2)出现在左子树,并且另一个key(n1或n2)出现在右子树,则root就是LCA. 如果两个key都出现在左子树,则说明LCA在左子树中,否则在右子树。
public class App { static class Node { Node left; Node right; int key; Node(int key) { this.key = key; this.left = null; this.right = null; } } static Node findLCA(Node root, int n1, int n2) { if(root == null) { return null; } if(root.key == n1 || root.key == n2) { return root; } Node left = findLCA(root.left, n1, n2); Node right = findLCA(root.right, n1, n2); if(left!=null && right!=null) { return root; } else { return left!=null?left:right; } } public static void main( String[] args ) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right = new Node(5); root.right.left = new Node(6); root.right.right = new Node(7); System.out.println(findLCA(root, 4, 6).key); }}
0 0
- 二叉树中找到俩个节点的最低公共祖先
- 树——在二叉树中找到两个节点的最低公共祖先LCA
- 二叉树中查找两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 二叉树中两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 二叉树中找到两个节点的最近公共祖先
- 求二叉树中两个节点p,q的最低公共祖先节点
- 求二叉树中两个节点的最低公共祖先节点
- 二叉树中寻找共同节点的最低公共祖先节点
- 求二叉树中两个节点的最低公共祖先节点
- 寻找二叉树两个节点的最低公共祖先(LCA)
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 二叉树相关面试题--树中两个节点的最低公共祖先
- 面试题50:二叉树中两个节点的最低公共祖先
- python: min 和 max 函数
- 初识Lucene全文索引
- 棋盘分割
- Delphi COM编程技术二(COM接口和COM组件)
- Linux平台设备和驱动
- 二叉树中找到俩个节点的最低公共祖先
- 蓝桥杯-生物芯片
- 欢迎使用CSDN-markdown编辑器
- Android进程保活招式大全
- C++库资源汇总
- MySQL簇的基本概念
- OSI七层协议
- Vue.js的组件(二)父组件与子组件的数据联系 之 父传子
- 命令行快捷键