《leetCode》:Lowest Common Ancestor of a Binary Search Tree
2016-07-16 14:46
375 查看
题目
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 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.
思路
简单来说:就是寻找某个节点的值在所要找的节点的中间,则此节点即为所求。由于是二叉搜索树,因此,利用二叉搜索树的特点即可完成。如果要判断的节点的值比root的值一大一小(包括等于),则root节点即为所求,如果要判断的节点的值均比root小,则其Lowest Common Ancestor就在roo节点的左边,同理,如果要判断的节点的值均比root的值大,则则其Lowest Common Ancestor就在roo节点的右边,这样利用递归就可以找到他们的Lowest Common Ancestor。
实现代码如下:
public class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null||p==null||q==null){ return null; } if(p.val<=root.val&&root.val<=q.val||(q.val<=root.val&&root.val<=p.val)){ return root; } else if(p.val<root.val&&p.val<root.val){ return lowestCommonAncestor(root.left,p,q); } else/* if(p.val>root.val&&q.val>root.val)*/{ return lowestCommonAncestor(root.right,p,q); } } }
相关文章推荐
- MySQL命令大全
- 部署DFS分布式文件系统
- 如何在Word中输入英语音标?非常简单好用
- JVM:jps
- java多线程
- 使button的背景色变为半透明的但不影响字体的透明度
- Ubuntu下Android Studio开发环境搭建
- 链表
- Python学习-生成器
- Redis-Windows
- Apk认领加本地签名
- centos实现ssh无密码登录
- Cookie/Session机制详解
- Hibernate查询部分字段并封装到指定类中(HQL)
- frame,iframe,frameset用法和区别
- C#中的virtual和abstract
- Search a 2D Matrix
- Shell 学习(二) 关键字:数据类型 字符串
- Python处理JSON
- Qt的QWaitCondition