Skip to content

Commit 28b9159

Browse files
committed
add Lowest Common Ancestor of a Binary Search Tree solution
1 parent ba15601 commit 28b9159

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* [Problem]: [235] Lowest Common Ancestor of a Binary Search Tree
3+
* (https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/)
4+
*/
5+
6+
class TreeNode {
7+
val: number;
8+
left: TreeNode | null;
9+
right: TreeNode | null;
10+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
11+
this.val = val === undefined ? 0 : val;
12+
this.left = left === undefined ? null : left;
13+
this.right = right === undefined ? null : right;
14+
}
15+
}
16+
17+
function lowestCommonAncestor(
18+
root: TreeNode | null,
19+
p: TreeNode | null,
20+
q: TreeNode | null
21+
): TreeNode | null {
22+
//시간복잡도 O(h)
23+
//공간복잡도 O(h)
24+
function recursiveFunc(
25+
root: TreeNode | null,
26+
p: TreeNode | null,
27+
q: TreeNode | null
28+
): TreeNode | null {
29+
if (!p || !root || !q) return null;
30+
if (p.val < root.val && q.val < root.val) {
31+
return recursiveFunc(root.left, p, q);
32+
}
33+
if (root.val < p.val && root.val < q.val) {
34+
return recursiveFunc(root.right, p, q);
35+
}
36+
37+
return root;
38+
}
39+
40+
//시간복잡도 O(h)
41+
//공간복잡도 O(1)
42+
function loopFunc(
43+
root: TreeNode | null,
44+
p: TreeNode | null,
45+
q: TreeNode | null
46+
): TreeNode | null {
47+
if (!p || !q || !root) return null;
48+
49+
let node = root;
50+
51+
while (node) {
52+
if (p.val < node.val && q.val < node.val) {
53+
node = node?.left!;
54+
} else if (p.val > node.val && q.val > node.val) {
55+
node = node?.right!;
56+
} else {
57+
return node;
58+
}
59+
}
60+
61+
return null;
62+
}
63+
}

0 commit comments

Comments
 (0)