Skip to content

Commit f00d7f2

Browse files
committed
https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/
1 parent ae78c6e commit f00d7f2

File tree

4 files changed

+87
-65
lines changed
  • alert-using-same-key-card-three-or-more-times-in-a-one-hour-period
  • find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree
  • validate-binary-tree-nodes

4 files changed

+87
-65
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ leetcode 测试
1010

1111
##### 包含的内容如下
1212

13+
https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/
14+
1315
https://leetcode.cn/problems/validate-binary-tree-nodes/
1416

1517
https://leetcode.cn/problems/alert-using-same-key-card-three-or-more-times-in-a-one-hour-period/
Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
export default function alertNames(
2-
keyName: string[],
3-
keyTime: string[]
4-
): string[] {
5-
const map = new Map<string, number[]>();
6-
7-
for (const [i, n] of keyName.entries()) {
8-
const t = keyTime[i]
9-
.split(":")
10-
.map(Number)
11-
.reduce((p, c, i) => p + (i === 0 ? 60 * c : c), 0);
12-
13-
const arr = map.get(n) ?? [];
14-
arr.push(t);
15-
map.set(n, arr);
16-
}
17-
18-
return [...map]
19-
.filter(
20-
([_k, v]) =>
21-
v.length >= 3 &&
22-
v
23-
.sort((a, b) => a - b)
24-
.some((n, i, a) => i + 2 < a.length && 60 >= a[i + 2] - n)
25-
)
26-
.map((a) => a[0])
27-
.sort();
28-
}
1+
export default function alertNames(
2+
keyName: string[],
3+
keyTime: string[],
4+
): string[] {
5+
const map = new Map<string, number[]>();
6+
7+
for (const [i, n] of keyName.entries()) {
8+
const t = keyTime[i]
9+
.split(":")
10+
.map(Number)
11+
.reduce((p, c, i) => p + (i === 0 ? 60 * c : c), 0);
12+
13+
const arr = map.get(n) ?? [];
14+
arr.push(t);
15+
map.set(n, arr);
16+
}
17+
18+
return [...map]
19+
.filter(
20+
([_k, v]) =>
21+
v.length >= 3 &&
22+
v
23+
.sort((a, b) => a - b)
24+
.some((n, i, a) => i + 2 < a.length && 60 >= a[i + 2] - n),
25+
)
26+
.map((a) => a[0])
27+
.sort();
28+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { TreeNode } from "../binary-tree-inorder-traversal/TreeNode.ts";
2+
3+
export default function getTargetCopy(
4+
original: TreeNode | null,
5+
cloned: TreeNode | null,
6+
target: TreeNode | null,
7+
): TreeNode | null {
8+
if (!target || !cloned) return null;
9+
if (target.val === cloned.val) return cloned;
10+
if (cloned.right) {
11+
const right = getTargetCopy(original, cloned.right, target);
12+
if (right) return right;
13+
}
14+
if (cloned.left) {
15+
const left = getTargetCopy(original, cloned.left, target);
16+
if (left) return left;
17+
}
18+
return null;
19+
}

validate-binary-tree-nodes/index.ts

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
1-
export default function validateBinaryTreeNodes(
2-
n: number,
3-
leftChild: number[],
4-
rightChild: number[]
5-
): boolean {
6-
const degree = Array(n).fill(0);
7-
for (const i of leftChild) {
8-
if (i >= 0) degree[i]++;
9-
}
10-
for (const i of rightChild) {
11-
if (i >= 0) degree[i]++;
12-
}
13-
14-
const zeros = degree.filter((a) => a === 0);
15-
if (
16-
!(
17-
Math.min(...degree) === 0 &&
18-
(n === 1 || Math.max(...degree) === 1) &&
19-
zeros.length === 1
20-
)
21-
)
22-
return false;
23-
24-
const visited = new Set<number>();
25-
26-
const q = [degree.findIndex((a) => a === 0)];
27-
for (const i of q) {
28-
if (visited.has(i)) continue;
29-
30-
visited.add(i);
31-
[leftChild[i], rightChild[i]]
32-
.filter((a) => a >= 0)
33-
.forEach((j) => q.push(j));
34-
}
35-
36-
return visited.size === n;
37-
}
1+
export default function validateBinaryTreeNodes(
2+
n: number,
3+
leftChild: number[],
4+
rightChild: number[],
5+
): boolean {
6+
const degree = Array(n).fill(0);
7+
for (const i of leftChild) {
8+
if (i >= 0) degree[i]++;
9+
}
10+
for (const i of rightChild) {
11+
if (i >= 0) degree[i]++;
12+
}
13+
14+
const zeros = degree.filter((a) => a === 0);
15+
if (
16+
!(
17+
Math.min(...degree) === 0 &&
18+
(n === 1 || Math.max(...degree) === 1) &&
19+
zeros.length === 1
20+
)
21+
) {
22+
return false;
23+
}
24+
25+
const visited = new Set<number>();
26+
27+
const q = [degree.findIndex((a) => a === 0)];
28+
for (const i of q) {
29+
if (visited.has(i)) continue;
30+
31+
visited.add(i);
32+
[leftChild[i], rightChild[i]]
33+
.filter((a) => a >= 0)
34+
.forEach((j) => q.push(j));
35+
}
36+
37+
return visited.size === n;
38+
}

0 commit comments

Comments
 (0)