File tree 1 file changed +64
-0
lines changed
0893-all-nodes-distance-k-in-binary-tree
1 file changed +64
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments