Skip to content

Commit f019efe

Browse files
committed
feat: subtree-of-another-tree solution
1 parent 6555c38 commit f019efe

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
/**
15+
* ํŠธ๋ฆฌ ๋‚ด์— ๋™์ผํ•œ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
16+
* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„
17+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nร—m) - n(root ๋…ธ๋“œ ์ˆ˜), m(subRoot ๋…ธ๋“œ ์ˆ˜)
18+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n+m) - ์ฒซ ๋ฒˆ์งธ isSubtree()์˜ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด์™€ isSameTree()์˜ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด๋ฅผ ๋”ํ•œ ๊ฒƒ
19+
* @param root
20+
* @param subRoot
21+
*/
22+
function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean {
23+
if(!subRoot) return true
24+
if(!root) return false
25+
26+
// ์ด์ „์— ํ’€์ดํ•œ isSameTree๋ฅผ ์ถ”๊ฐ€
27+
function isSameTree(p: TreeNode | null, q: TreeNode | null) {
28+
if(!p || !q) {
29+
return p === q;
30+
}
31+
return p.val === q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
32+
}
33+
34+
if (isSameTree(root, subRoot)) return true
35+
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot)
36+
}
37+

0 commit comments

Comments
ย (0)