算法系列——Lowest Common Ancestor of a Binary Tree
来源:互联网 发布:淘宝免费旺铺模板下载 编辑:程序博客网 时间:2024/06/06 06:44
题目描述
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
_______3______ / \ ___5__ ___1__ / \ / \ 6 _2 0 8 / \ 7 4
For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
解题思路
这道题目和Lowest Common Ancestor of a Binary Search Tree
类似,只不过现在条件变为一颗普通的二叉树,要求出最低公共祖先。
首先要先确定给的两个node是否都在tree里,如果都在tree里的话,就可以分成3种情况,第一种情况是两个节点是在公共祖先的左右两侧,第二种情况是都在树的左侧,第三种情况是都在树的右侧,如果是第二,第三种情况的话,公共祖先就在给定的两个点中比较上面的那一个。
如果转换成代码的话,从上往下走,base case分为3种,判断遇到了p就直接返回p,遇到q就直接返回q,不用向下做了。如果left,right都不为空,就返回root自己;left,right哪一个不为空就返回哪个,整个recursion做完就可以得到LCA。
程序实现
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) return null; if(root == p) return p; if(root == q) return q; TreeNode left = lowestCommonAncestor(root.left, p, q); TreeNode right = lowestCommonAncestor(root.right, p, q); if(left != null && right != null) return root; return left != null ? left : right;}
- 算法系列—— Lowest Common Ancestor of a Binary Search Tree
- 算法系列——Lowest Common Ancestor of a Binary Tree
- leetcode——Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree(***)
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Lowest Common Ancestor of a Binary Tree
- Spring MVC之@RequestMapping 详解
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- POJ 2255 二叉树遍历 已知前序遍历 中序遍历 求后序遍历
- Windows10下JDK、eclipse与SDK及ADT的配置
- 创建spring boot 项目
- 算法系列——Lowest Common Ancestor of a Binary Tree
- Unable to create positive samples
- contenttype类型对照表
- 杀进程场景
- 习题 4-2 Squares UVa 201
- 九、matplotlib系列---pyplot极坐标图的绘制
- 跳台阶
- 用unity5开发第一个手机游戏(1) 各种插件的准备
- MySQL高可用架构之MHA(一)