package tree.recursive;
import tree.TreeNode;
public class LowestCommonAncestorOfABinarySearchTree {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode a, TreeNode b) {
return helper(root, Math.min(a.val, b.val) , Math.max(a.val, b.val));
}
private TreeNode helper(TreeNode root, int low, int high) {
if (root == null || root.val == low || root.val == high) return root;
if (low < root.val && root.val < high) return root;
return helper(root.val > high ? root.left : root.right, low, high);
}
}
package com.eureka
package tree.recursive
import tree.TreeNode
import scala.annotation.tailrec
object LowestCommonAncestorOfABinarySearchTree:
def lowestCommonAncestor(_root: TreeNode, p: TreeNode, q: TreeNode): TreeNode =
@tailrec def go(root: TreeNode, min: Int, max: Int): TreeNode =
if root == null || root.value == min || root.value == max then root
else if min < root.value && root.value < max then root
else go(if root.value > max then root.left else root.right, min, max)
go(_root, math.min(p.value, q.value), math.max(p.value, q.value))