1
+ // Runtime: 3 ms (Top 94.64%) | Memory: 42.3 MB (Top 95.72%)
1
2
/**
2
3
* Definition for a binary tree node.
3
4
* public class TreeNode {
4
- * int val;
5
- * TreeNode left;
6
- * TreeNode right;
7
- * TreeNode() {}
8
- * TreeNode(int val) { this.val = val; }
9
- * TreeNode(int val, TreeNode left, TreeNode right) {
10
- * this.val = val;
11
- * this.left = left;
12
- * this.right = right;
13
- * }
5
+ * int val;
6
+ * TreeNode left;
7
+ * TreeNode right;
8
+ * TreeNode() {}
9
+ * TreeNode(int val) { this.val = val; }
10
+ * TreeNode(int val, TreeNode left, TreeNode right) {
11
+ * this.val = val;
12
+ * this.left = left;
13
+ * this.right = right;
14
+ * }
14
15
* }
15
16
*/
16
17
class Solution {
17
-
18
+
18
19
private static class MNode {
19
20
TreeNode Node ;
20
21
int hDist ;
@@ -25,42 +26,42 @@ private static class MNode {
25
26
level = l ;
26
27
}
27
28
}
28
-
29
+
29
30
public List <List <Integer >> verticalTraversal (TreeNode root ) {
30
31
Map <Integer , PriorityQueue <MNode >> map = new TreeMap <>();
31
32
Queue <MNode > q = new LinkedList <>();
32
-
33
+
33
34
q .add (new MNode (root , 0 , 0 ));
34
-
35
+
35
36
while (!q .isEmpty ()) {
36
-
37
+
37
38
MNode curr = q .poll ();
38
- if (map .containsKey (curr .hDist ))
39
- map .get (curr .hDist ).add (curr );
40
-
39
+ if (map .containsKey (curr .hDist ))
40
+ map .get (curr .hDist ).add (curr );
41
+
41
42
else {
42
43
PriorityQueue <MNode > pq = new PriorityQueue <>
43
44
((a ,b ) -> (a .level == b .level )? a .Node .val - b .Node .val : a .level - b .level );
44
- pq .add (curr );
45
+ pq .add (curr );
45
46
map .put (curr .hDist , pq );
46
47
}
47
-
48
+
48
49
if (curr .Node .left != null )
49
50
q .add (new MNode (curr .Node .left , curr .hDist -1 , curr .level + 1 ));
50
-
51
+
51
52
if (curr .Node .right != null )
52
- q .add (new MNode (curr .Node .right , curr .hDist +1 , curr .level + 1 ));
53
+ q .add (new MNode (curr .Node .right , curr .hDist +1 , curr .level + 1 ));
53
54
}
54
-
55
+
55
56
List <List <Integer >> ans = new ArrayList <>();
56
- for (Integer key : map .keySet ()) {
57
+ for (Integer key : map .keySet ()) {
57
58
List <Integer > temp = new ArrayList <>();
58
59
while (!map .get (key ).isEmpty ()) { temp .add (map .get (key ).poll ().Node .val ); }
59
60
ans .add (new ArrayList <>(temp ));
60
61
}
61
-
62
+
62
63
return ans ;
63
-
64
+
64
65
}
65
-
66
- }
66
+
67
+ }
0 commit comments