【leetcode】235. Lowest Common Ancestor of a Binary Search Tree
2016-05-06 13:51
501 查看
题目要求:
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
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).”
For example, the lowest common ancestor (LCA) of nodes
Another example is LCA of nodes
since a node can be a descendant of itself according to the LCA definition.
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
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).”
_______6______ / \ ___2__ ___8__ / \ / \ 0 _4 7 9 / \ 3 5
For example, the lowest common ancestor (LCA) of nodes
2and
8is
6.
Another example is LCA of nodes
2and
4is
2,
since a node can be a descendant of itself according to the LCA definition.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null) { return null; } //二者中有一个是根节点就返回根节点 if(p.val==root.val||q.val==root.val) { return root; } //分别在树的左右两边就返回根节点 if((p.val<root.val)&&(q.val>root.val)) { return root; } if((p.val>root.val)&&(q.val<root.val)) { return root; } //都在左边,就对左子树递归调用此函数 if((p.val<root.val)&&(q.val<root.val)) { return lowestCommonAncestor(root.left,p,q); } //都在右边,就对右子树递归调用此函数 if((p.val>root.val)&&(q.val>root.val)) { return lowestCommonAncestor(root.right,p,q); } return null; } }
相关文章推荐
- MVC中上传图片文件
- 字符的全排列
- Python中 os 与 sys 模块
- Mybatis MapperScannerConfigurer 配置
- Android线程的正确使用姿势
- Android 实现形态各异的双向侧滑菜单 自定义控件来袭
- Java:封装POI实现word的docx文件的简单模板功能
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- mvc 4 Razor (@html.xx)语法大全以及应用
- 【Linux进阶】CentOS安装java环境
- [剑指offer]数组中的逆序对
- JS中六种数据类型(六)——Object
- MATLAB去除人声
- Python语言中 import 与 reload 的使用问题
- 批量清除Exchange 2013服务器上的日志
- 如何在 Eclipse 中使用命令行
- SERVLETJSP学习(一)——Servlet基础 、 HTTP协议
- 006.子类和父类的加载顺序
- 面向对象的进一步拓展
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系