Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
According to thedefinition 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 allowa node to be a descendant of itself).”
_______6______ / / ___2__ ___8__ / / / / 0 _4 7 9 / / 3 5
For example, the lowest common ancestor (LCA) of nodes2and8is6. Another example is LCA of nodes2and4is2, since a node can be a descendant of itself according to the LCA definition.
這道題不難。主要是先要搞清楚LCA的定義。
然后LCA呢只會分為三種情況,如果P,Q中最大值的那個都小于root的值,那么LCA只能在左邊了。反正如果P,Q中最小值的那個都大于root的值,那么LCA肯定只能在右邊。如果這兩種情況都不是,那么就是最特殊的一種。LCA直接就是root。因為沒有辦法把這兩個node一起放在一邊子樹去了。
代碼如下。~
/** * 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(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); } return root; }}新聞熱點
疑難解答