File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed
lowest-common-ancestor-of-a-binary-search-tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ *@link https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
3
+ *
4
+ * 접근 방법 :
5
+ * - BST니까 p,q 노드를 root 노드와 비교해서 탐색 범위 좁히기
6
+ * - root.val보다 작은 경우 왼쪽 하위 트리 탐색
7
+ * - root.vale보다 큰 경우 오른쪽 하위 트리 탐색
8
+ * - 그 외의 경우는 값이 같으니까 root 노드 리턴
9
+ *
10
+ * 시간복잡도 : O(n)
11
+ * - 균형 잡힌 BST의 경우 O(logn)
12
+ * - 한쪽으로 치우친 트리의 경우 O(n)
13
+ *
14
+ * 공간복잡도 : O(n)
15
+ * - 재귀 호출 스택 크기가 트리 깊이에 비례
16
+ * - 균형 잡힌 BST의 경우 O(logn)
17
+ * - 한쪽으로 치우친 트리의 경우 O(n)
18
+ */
19
+ class TreeNode {
20
+ val : number ;
21
+ left : TreeNode | null ;
22
+ right : TreeNode | null ;
23
+ constructor ( val ?: number , left ?: TreeNode | null , right ?: TreeNode | null ) {
24
+ this . val = val === undefined ? 0 : val ;
25
+ this . left = left === undefined ? null : left ;
26
+ this . right = right === undefined ? null : right ;
27
+ }
28
+ }
29
+
30
+ function lowestCommonAncestor (
31
+ root : TreeNode | null ,
32
+ p : TreeNode | null ,
33
+ q : TreeNode | null
34
+ ) : TreeNode | null {
35
+ if ( ! root || ! p || ! q ) return null ;
36
+
37
+ if ( p . val < root . val && q . val < root . val )
38
+ return lowestCommonAncestor ( root . left , p , q ) ;
39
+ else if ( p . val > root . val && q . val > root . val )
40
+ return lowestCommonAncestor ( root . right , p , q ) ;
41
+ else return root ;
42
+ }
You can’t perform that action at this time.
0 commit comments