Skip to content

Commit 7f5021b

Browse files
committed
Time: 64 ms (60.34%), Space: 52.3 MB (46.1%) - LeetHub
1 parent 33617ef commit 7f5021b

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} root
10+
* @param {TreeNode} target
11+
* @param {number} k
12+
* @return {number[]}
13+
*/
14+
var distanceK = function(root, target, k) {
15+
if (!root) return [];
16+
17+
let map = new Map();
18+
let parentMap = new Map();
19+
let queue = [];
20+
21+
queue.push(root);
22+
map.set(root.val, 0);
23+
parentMap.set(root, null);
24+
25+
while (queue.length > 0) {
26+
let cur = queue.pop();
27+
let level = map.get(cur.val);
28+
29+
if (cur.left) {
30+
queue.push(cur.left);
31+
map.set(cur.left.val, level + 1);
32+
parentMap.set(cur.left, cur);
33+
}
34+
35+
if (cur.right) {
36+
queue.push(cur.right);
37+
map.set(cur.right.val, level + 1);
38+
parentMap.set(cur.right, cur);
39+
}
40+
}
41+
42+
let res = [];
43+
let visited = new Set();
44+
queue = [[target, 0]];
45+
visited.add(target);
46+
47+
while (queue.length > 0) {
48+
let [cur, distance] = queue.shift();
49+
50+
if (distance === k) {
51+
res.push(cur.val);
52+
continue;
53+
}
54+
55+
for (let neighbor of [cur.left, cur.right, parentMap.get(cur)]) {
56+
if (neighbor && !visited.has(neighbor)) {
57+
queue.push([neighbor, distance + 1]);
58+
visited.add(neighbor);
59+
}
60+
}
61+
}
62+
63+
return res;
64+
};

0 commit comments

Comments
 (0)