Skip to content

Commit f075676

Browse files
committed
feat(soobing): week15 > subtree-of-another-tree
1 parent 0f2bd4b commit f075676

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

subtree-of-another-tree/soobing.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* 문제 설명
3+
* - 두 개의 이진트리 중, subTree가 존재하는지 확인하는 문제
4+
*
5+
* 아이디어
6+
* 1) DFS + isSameTree 체크
7+
*/
8+
class TreeNode {
9+
val: number;
10+
left: TreeNode | null;
11+
right: TreeNode | null;
12+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
13+
this.val = val === undefined ? 0 : val;
14+
this.left = left === undefined ? null : left;
15+
this.right = right === undefined ? null : right;
16+
}
17+
}
18+
19+
function isSameTree(tree1: TreeNode | null, tree2: TreeNode | null) {
20+
if ((tree1 && !tree2) || (!tree1 && tree2)) return false;
21+
if (tree1 === null && tree2 === null) return true;
22+
if (tree1?.val !== tree2?.val) return false;
23+
return (
24+
isSameTree(tree1?.left ?? null, tree2?.left ?? null) &&
25+
isSameTree(tree1?.right ?? null, tree2?.right ?? null)
26+
);
27+
}
28+
29+
function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean {
30+
if (!root) return false;
31+
if (isSameTree(root, subRoot)) return true;
32+
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);
33+
}

0 commit comments

Comments
 (0)