Skip to content

Commit c59802d

Browse files
committed
feat(soobing): week12 > same-tree
1 parent 4c5f2fa commit c59802d

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

same-tree/soobing.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* 문제 설명
3+
* - 두 이진 트리가 같은지 확인하는 문제
4+
*
5+
* 아이디어
6+
* 1) 트리 탐색 (BFS, DFS)을 하면서 비교한다.
7+
*/
8+
9+
class TreeNode {
10+
val: number;
11+
left: TreeNode | null;
12+
right: TreeNode | null;
13+
14+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
15+
this.val = val === undefined ? 0 : val;
16+
this.left = left === undefined ? null : left;
17+
this.right = right === undefined ? null : right;
18+
}
19+
}
20+
21+
function isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {
22+
if (!p && !q) return true;
23+
if (!p || !q) return false;
24+
if (p.val !== q.val) return false;
25+
26+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
27+
}
28+
29+
function isSameTreeBFS(p: TreeNode | null, q: TreeNode | null): boolean {
30+
const queue1: (TreeNode | null)[] = [p];
31+
const queue2: (TreeNode | null)[] = [q];
32+
33+
while (queue1.length > 0 && queue2.length > 0) {
34+
const node1 = queue1.shift();
35+
const node2 = queue2.shift();
36+
37+
if (!node1 && !node2) continue;
38+
if (!node1 || !node2) return false;
39+
if (node1.val !== node2.val) return false;
40+
41+
queue1.push(node1.left);
42+
queue1.push(node1.right);
43+
queue2.push(node2.left);
44+
queue2.push(node2.right);
45+
}
46+
47+
return queue1.length === queue2.length;
48+
}

0 commit comments

Comments
 (0)