Skip to content

Commit e82232b

Browse files
committed
Feat: 235. Lowest Common Ancestor of a Binary Search Tree
1 parent b70e3af commit e82232b

File tree

1 file changed

+52
-0
lines changed
  • lowest-common-ancestor-of-a-binary-search-tree

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
/**
13+
* https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description
14+
* T.C. O(log n)
15+
* S.C. O(log n)
16+
*/
17+
function lowestCommonAncestor(
18+
root: TreeNode | null,
19+
p: TreeNode | null,
20+
q: TreeNode | null
21+
): TreeNode | null {
22+
if (!root) return null;
23+
if (root.val > p!.val && root.val > q!.val) {
24+
return lowestCommonAncestor(root.left, p, q);
25+
} else if (root.val < p!.val && root.val < q!.val) {
26+
return lowestCommonAncestor(root.right, p, q);
27+
} else {
28+
return root;
29+
}
30+
}
31+
32+
/**
33+
* iterative
34+
* T.C. O(log n)
35+
* S.C. O(1)
36+
*/
37+
function lowestCommonAncestor(
38+
root: TreeNode | null,
39+
p: TreeNode | null,
40+
q: TreeNode | null
41+
): TreeNode | null {
42+
while (root) {
43+
if (root.val > p!.val && root.val > q!.val) {
44+
root = root.left;
45+
} else if (root.val < p!.val && root.val < q!.val) {
46+
root = root.right;
47+
} else {
48+
return root;
49+
}
50+
}
51+
return null;
52+
}

0 commit comments

Comments
 (0)