Skip to content

Commit fb0d7dd

Browse files
authored
feat: add ts solution to problem: No.863 (doocs#2913)
1 parent 8987620 commit fb0d7dd

File tree

3 files changed

+169
-0
lines changed

3 files changed

+169
-0
lines changed

solution/0800-0899/0863.All Nodes Distance K in Binary Tree/README.md

+58
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,64 @@ class Solution:
302302
return ans
303303
```
304304

305+
#### TypeScript
306+
307+
```ts
308+
/**
309+
* Definition for a binary tree node.
310+
* class TreeNode {
311+
* val: number
312+
* left: TreeNode | null
313+
* right: TreeNode | null
314+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
315+
* this.val = (val===undefined ? 0 : val)
316+
* this.left = (left===undefined ? null : left)
317+
* this.right = (right===undefined ? null : right)
318+
* }
319+
* }
320+
*/
321+
322+
function distanceK(root: TreeNode | null, target: TreeNode | null, k: number): number[] {
323+
if (!root) return [0];
324+
325+
const g: Record<number, number[]> = {};
326+
327+
const dfs = (node: TreeNode | null, parent: TreeNode | null = null) => {
328+
if (!node) return;
329+
330+
g[node.val] ??= [];
331+
if (parent) g[node.val].push(parent.val);
332+
if (node.left) g[node.val].push(node.left.val);
333+
if (node.right) g[node.val].push(node.right.val);
334+
335+
dfs(node.left, node);
336+
dfs(node.right, node);
337+
};
338+
339+
dfs(root);
340+
341+
const vis = new Set<number>();
342+
let q = [target!.val];
343+
344+
while (q.length) {
345+
if (!k--) return q;
346+
347+
const nextQ: number[] = [];
348+
349+
for (const x of q) {
350+
if (vis.has(x)) continue;
351+
352+
vis.add(x);
353+
nextQ.push(...g[x].filter(x => !vis.has(x)));
354+
}
355+
356+
q = nextQ;
357+
}
358+
359+
return [];
360+
}
361+
```
362+
305363
<!-- tabs:end -->
306364

307365
<!-- solution:end -->

solution/0800-0899/0863.All Nodes Distance K in Binary Tree/README_EN.md

+58
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,64 @@ func distanceK(root *TreeNode, target *TreeNode, k int) []int {
242242
}
243243
```
244244

245+
#### TypeScript
246+
247+
```ts
248+
/**
249+
* Definition for a binary tree node.
250+
* class TreeNode {
251+
* val: number
252+
* left: TreeNode | null
253+
* right: TreeNode | null
254+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
255+
* this.val = (val===undefined ? 0 : val)
256+
* this.left = (left===undefined ? null : left)
257+
* this.right = (right===undefined ? null : right)
258+
* }
259+
* }
260+
*/
261+
262+
function distanceK(root: TreeNode | null, target: TreeNode | null, k: number): number[] {
263+
if (!root) return [0];
264+
265+
const g: Record<number, number[]> = {};
266+
267+
const dfs = (node: TreeNode | null, parent: TreeNode | null = null) => {
268+
if (!node) return;
269+
270+
g[node.val] ??= [];
271+
if (parent) g[node.val].push(parent.val);
272+
if (node.left) g[node.val].push(node.left.val);
273+
if (node.right) g[node.val].push(node.right.val);
274+
275+
dfs(node.left, node);
276+
dfs(node.right, node);
277+
};
278+
279+
dfs(root);
280+
281+
const vis = new Set<number>();
282+
let q = [target!.val];
283+
284+
while (q.length) {
285+
if (!k--) return q;
286+
287+
const nextQ: number[] = [];
288+
289+
for (const x of q) {
290+
if (vis.has(x)) continue;
291+
292+
vis.add(x);
293+
nextQ.push(...g[x].filter(x => !vis.has(x)));
294+
}
295+
296+
q = nextQ;
297+
}
298+
299+
return [];
300+
}
301+
```
302+
245303
<!-- tabs:end -->
246304

247305
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
function distanceK(root: TreeNode | null, target: TreeNode | null, k: number): number[] {
16+
if (!root) return [0];
17+
18+
const g: Record<number, number[]> = {};
19+
20+
const dfs = (node: TreeNode | null, parent: TreeNode | null = null) => {
21+
if (!node) return;
22+
23+
g[node.val] ??= [];
24+
if (parent) g[node.val].push(parent.val);
25+
if (node.left) g[node.val].push(node.left.val);
26+
if (node.right) g[node.val].push(node.right.val);
27+
28+
dfs(node.left, node);
29+
dfs(node.right, node);
30+
};
31+
32+
dfs(root);
33+
34+
const vis = new Set<number>();
35+
let q = [target!.val];
36+
37+
while (q.length) {
38+
if (!k--) return q;
39+
40+
const nextQ: number[] = [];
41+
42+
for (const x of q) {
43+
if (vis.has(x)) continue;
44+
45+
vis.add(x);
46+
nextQ.push(...g[x].filter(x => !vis.has(x)));
47+
}
48+
49+
q = nextQ;
50+
}
51+
52+
return [];
53+
}

0 commit comments

Comments
 (0)