Leetcode: Lowest Common Ancestor of a Binary Search Tree
2015-12-20 08:06
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).” _______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.
如果如果p,q 比root小, 则LCA必定在左子树, 如果p,q比root大, 则LCA必定在右子树. 如果一大一小, 则root即为LCA. 如果p or q等于root,那么root也是LCA
/** * 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 (root.val == p.val || root.val == q.val) return root; else if (root.val > p.val && root.val > q.val) return lowestCommonAncestor(root.left, p, q); else if (root.val < p.val && root.val < q.val) return lowestCommonAncestor(root.right, p, q); else return root; } }
Iteration:
/** * 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; while (root != null) { if (root.val==p.val || root.val==q.val) return root; if (root.val>p.val && root.val>q.val) root=root.left; else if (root.val<p.val && root.val<q.val) root=root.right; else return root; } return null; } }
相关文章推荐
- 思想上移,行动下移——抽象工厂+反射+配置文件
- 【机房收费系统】数据库设计
- 支持向量机(SVM)非线性数据切割
- QQ音乐API
- bzoj3517 翻硬币 数学
- LeetCode - Remove Nth Node From End of List
- 【Beta阶段】第八次Scrum Meeting!
- error: 'for' loop initial declarations are only allowed in C99 mode
- sameersbn/gitlab6.9.2实战
- UVAlive2531 The K-League(最大流)
- 向操蛋的行规说NO!
- 2016太原网络营销师郭文军讲解如何运营自媒体下的【百度贴吧】
- 完全纯净!你的最佳PE工具箱-微PE
- C语言递归调用2:猜数小游戏
- Leetcode: Palindrome Linked List
- LeetCode - 4Sum
- VS 2008 也能玩转 Node.JS!
- android fragment
- 310. Minimum Height Trees
- 《世界是数字的》读后感二