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.
<Solution>考慮兩種情況
- 如果是 v 和 w 剛好是一左一右的子節點,那麼 (root.val - v.val) * (root.val - w.val) 一定會小於 0
- 如果 v 和 w 其中一個剛好是要找的 LCA,那麼 (root.val - v.val) * (root.val - w.val) = 0
Java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for a binary tree node. | |
* public class TreeNode { | |
* int val; | |
* TreeNode left; | |
* TreeNode right; | |
* TreeNode(int x) { val = x; } | |
* } | |
*/ | |
class Solution { | |
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { | |
//>> (root.val - (long)p.val ) * (root.val - (long)q.val) to avoid overflow | |
while((root.val - p.val ) * (root.val - q.val) > 0) { | |
root = p.val < root.val ? root.left : root.right; | |
} | |
return root; | |
} | |
} |
沒有留言:
張貼留言