[LeetCode 235] Lowest Common Ancestor of a Binary Search Tree
2015-08-19 14:57
621 查看
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.
Solution:
1use property of BST
Add check to verify if p and q is valid tree node
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.
Solution:
1use property of BST
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if((root.val>=p.val && root.val<=q.val)||(root.val<=p.val && root.val>=q.val)) return root; if(root.val>=p.val && root.val>=q.val){ return lowestCommonAncestor(root.left, p, q); } return lowestCommonAncestor(root.right, p, q); }
Add check to verify if p and q is valid tree node
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) return null; int max = root.val; int min = root.val; TreeNode t1 = root; while(t1!=null){ min = t1.val; t1 = t1.left; } t1 = root; while(t1!=null){ max = t1.val; t1 = t1.right; } if(p.val>q.val && (min>q.val || max<p.val)) return null; if(q.val>p.val && (min>p.val || max<q.val)) return null; if((root.val>=p.val && root.val<=q.val)||(root.val<=p.val && root.val>=q.val)) return root; if(root.val>=p.val && root.val>=q.val){ return lowestCommonAncestor(root.left, p, q); } return lowestCommonAncestor(root.right, p, q); }
相关文章推荐
- flex Chrome flash调试时 出现Shockwave flash has crashed的解决办法
- n阶方阵的最值问题和对角线的和问题
- 【微信】网页授权,获取CODE,OPENID,
- 程序员必看--23种设计模式及解释(中英文对照)——每天都要坚持看上几遍
- 软件工程常用技术
- 三种基本布局(不常用)以及全屏和Activity的两种启动方式
- Centos 内存占满 释放内存
- scp
- iOS 开发的一些小技巧篇
- iOS项目开发实战——plist数组解析
- [MFC学习笔记]--SOCKET编程只client端\UDPsocket通信
- 配置文件
- [leetcode] Word Break II
- java线程停止、暂停和恢复等状态的控制
- fl2440 3G拨号
- Treasure Exploration(POJ_2594)
- hdu 5401 Persistent Link/cut Tree
- spring-boot web应用(实现图片旋转、放大)
- python之路-----web应用的创建(python3.4下,django连接mysql)
- 九度OJ 题目1072:有多少不同的面值组合?