Skip to content

Commit 631f5e4

Browse files
committed
feat: Lowest Common Ancestor of a Binary Search Tree
1 parent d8d466f commit 631f5e4

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Time complexity: O(logn)
2+
// Space complexity: O(logn)
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* function TreeNode(val) {
7+
* this.val = val;
8+
* this.left = this.right = null;
9+
* }
10+
*/
11+
12+
/**
13+
* @param {TreeNode} root
14+
* @param {TreeNode} p
15+
* @param {TreeNode} q
16+
* @return {TreeNode}
17+
*/
18+
var lowestCommonAncestor = function (root, p, q) {
19+
// 1. 각자 부모 리스트 완성
20+
const search = (target, parent) => {
21+
const dfs = (current) => {
22+
if (target.val > current.val) {
23+
dfs(current.right);
24+
}
25+
26+
if (target.val < current.val) {
27+
dfs(current.left);
28+
}
29+
30+
parent.push(current);
31+
};
32+
33+
dfs(root);
34+
};
35+
36+
const parentP = [];
37+
const parentQ = [];
38+
39+
search(p, parentP);
40+
search(q, parentQ);
41+
42+
// 2. 공통 부모 탐색
43+
let answer = null;
44+
45+
while (
46+
parentP.at(-1) &&
47+
parentQ.at(-1) &&
48+
parentP.at(-1).val === parentQ.at(-1).val
49+
) {
50+
answer = parentP.at(-1);
51+
parentP.pop();
52+
parentQ.pop();
53+
}
54+
55+
return answer;
56+
};

0 commit comments

Comments
 (0)