Skip to content

Commit a562a4c

Browse files
committed
✨ [572] pretty simple
1 parent d4b557d commit a562a4c

File tree

3 files changed

+97
-1
lines changed

3 files changed

+97
-1
lines changed

572/my_solution.js

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
class TreeNode {
2+
constructor(val, left, right) {
3+
this.val = (val === undefined ? 0 : val);
4+
this.left = (left === undefined ? null : left);
5+
this.right = (right === undefined ? null : right);
6+
}
7+
}
8+
9+
/**
10+
* @param {TreeNode} root
11+
* @param {TreeNode} subRoot
12+
* @return {boolean}
13+
*/
14+
const isSubtree = (root, subRoot) => {
15+
let queue = [root];
16+
17+
const isNodeSame = (node, sub) => {
18+
console.log("node")
19+
console.log(node)
20+
console.log("sub")
21+
console.log(sub)
22+
console.log(`node?.val?:${node?.val ?? null} !== sub.val:${sub?.val ?? null} -> ${(node?.val ?? null) !== sub?.val ?? null}`)
23+
24+
if ((node?.val ?? null) !== (sub?.val ?? null)) return false;
25+
26+
if (null === node && null === sub) {
27+
console.log(">>> BOTH EMPTY")
28+
return true;
29+
}
30+
31+
return isNodeSame(node?.left ?? null, sub?.left ?? null) && isNodeSame(node?.right ?? null, sub?.right ?? null);
32+
}
33+
34+
while (queue.length > 0) {
35+
let curr = queue.shift(), left = curr.left, right = curr.right;
36+
if (isNodeSame(curr, subRoot)) {
37+
return true;
38+
}
39+
40+
if (null !== left) queue.push(left);
41+
if (null !== right) queue.push(right);
42+
}
43+
44+
return false;
45+
};
46+
47+
// Input: root = [3,4,5,1,2], subRoot = [4,1,2]
48+
// true
49+
50+
let x =
51+
// isSubtree(new TreeNode(3,
52+
// new TreeNode(4, new TreeNode(1), new TreeNode(2, new TreeNode(0))),
53+
// new TreeNode(5)),
54+
// new TreeNode(4, new TreeNode(1), new TreeNode(2))
55+
// )
56+
57+
isSubtree(new TreeNode(3,
58+
new TreeNode(4, new TreeNode(1), new TreeNode(2)),
59+
new TreeNode(5)),
60+
new TreeNode(4, new TreeNode(1), new TreeNode(2))
61+
)
62+
63+
console.log("Result")
64+
console.log(x)

572/solution.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class TreeNode {
2+
constructor(val, left, right) {
3+
this.val = (val === undefined ? 0 : val);
4+
this.left = (left === undefined ? null : left);
5+
this.right = (right === undefined ? null : right);
6+
}
7+
}
8+
9+
/**
10+
* @param {TreeNode} root
11+
* @param {TreeNode} subRoot
12+
* @return {boolean}
13+
*/
14+
const isSubtree = (root, subRoot) => {
15+
let queue = [root];
16+
17+
const isNodeSame = (node, sub) => {
18+
if ((node?.val ?? null) !== (sub?.val ?? null)) return false;
19+
if (null === node && null === sub) return true;
20+
return isNodeSame(node?.left ?? null, sub?.left ?? null) && isNodeSame(node?.right ?? null, sub?.right ?? null);
21+
}
22+
23+
while (queue.length > 0) {
24+
let curr = queue.shift(), left = curr.left, right = curr.right;
25+
if (isNodeSame(curr, subRoot)) return true;
26+
if (null !== left) queue.push(left);
27+
if (null !== right) queue.push(right);
28+
}
29+
30+
return false;
31+
};

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
- [424. Longest Repeating Character Replacement](./424/)
7272
- [435. Non-overlapping Intervals](./435/)
7373
- [530. Minimum Absolute Difference in BST](./530/)
74+
- [572. Subtree of Another Tree](./572/)
7475
- [647. Palindromic Substrings](./647/)
7576
- [771. Jewels and Stones](./771/)
7677
- [714. Best Time to Buy and Sell Stock with Transaction Fee](./714/)
@@ -140,7 +141,7 @@ Batch create:
140141
NOTE: JS IS HERE
141142
-->
142143
```ssh
143-
chapter=226 && mkdir ./$chapter && touch ./$chapter/my_solution.js && touch ./$chapter/solution.js && alias x="node ./$chapter/my_solution.js"
144+
chapter=572 && mkdir ./$chapter && touch ./$chapter/my_solution.js && touch ./$chapter/solution.js && alias x="node ./$chapter/my_solution.js"
144145
```
145146
> then you can use `x` for quick debug.
146147

0 commit comments

Comments
 (0)