Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
2016-10-07 01:59
417 查看
235. Lowest Common Ancestor of a Binary Search Tree
Total Accepted: 96078 Total Submissions: 254837 Difficulty: EasyGiven 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.
Hide Company Tags
Amazon Microsoft Facebook Twitter
Hide Tags
Tree
Hide Similar Problems
(M) Lowest Common Ancestor of a Binary Tree
思路:
解法一:
沿用在236题中提到的思路,用个dfs类型的contains(TreeNode root, TreeNode p)来判断是不是包含该节点。但是这题的运行时间就只有9ms,而上一题是980ms。。。
/**
* 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 (!contains(root, p.val) || !contains(root,q.val)) return null;
if ((root.val == q.val) || (root.val == p.val)) return root;
//不同两边
if (contains(root.left, p.val) && contains(root.right, q.val)) return root;
if (contains(root.left, q.val) && contains(root.right, p.val)) return root;
//相同
return contains(root.left,p.val) ? lowestCommonAncestor(root.left,p,q) : lowestCommonAncestor(root.right,p,q);
}
public boolean contains(TreeNode root, int val){
if (root == null) return false;
if (root.val == val){
return true;
}else{
return root.val > val ? contains(root.left, val) : contains(root.right, val);
}
}
思路二:
很巧妙的思路。利用BST的性质。
如果俩node节点的最小值大于root.val,那么说明一定在右子树。
如果俩node节点的最大值小于root.val,那么说明一定在左子树。
否则应该返回root。
/** * 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 || p == null || q == null) return null; if(Math.max(p.val, q.val) < root.val) { return lowestCommonAncestor(root.left, p, q); } else if(Math.min(p.val, q.val) > root.val) { return lowestCommonAncestor(root.right, p, q); } else return root; } }
相关文章推荐
- <LeetCode OJ> 235. Lowest Common Ancestor of a Binary Search Tree
- 235. Lowest Common Ancestor of a Binary Search Tree LeetCode
- LeetCode *** 235. Lowest Common Ancestor of a Binary Search Tree
- [leetcode] 235.Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- [leetcode] 235. Lowest Common Ancestor of a Binary Search Tree 解题报告
- [leetcode] 235. Lowest Common Ancestor of a Binary Search Tree
- leetcode 每日一题 235. Lowest Common Ancestor of a Binary Search Tree
- leetcode:235. Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- (easy)LeetCode 235.Lowest Common Ancestor of a Binary Search Tree
- 【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree
- [LeetCode]235. Lowest Common Ancestor of a Binary Search Tree
- 【LeetCode】235. Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree(二叉搜索树的最低公共祖先)
- [LeetCode]235.Lowest Common Ancestor of a Binary Search Tree
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- 【leetcode每日一题】235.Lowest Common Ancestor of a Binary Search Tree
- Leetcode:235. Lowest Common Ancestor of a Binary Search Tree(JAVA)