Skip to content

Commit 405c086

Browse files
solves bnary tree level order traversla II
1 parent 6c0f657 commit 405c086

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.util.ArrayList;
2+
import java.util.Collections;
3+
import java.util.LinkedList;
4+
import java.util.List;
5+
import java.util.Queue;
6+
7+
public class BinaryTreeLevelOrderTraversalII {
8+
private static class TreeNode {
9+
int val;
10+
TreeNode left;
11+
TreeNode right;
12+
}
13+
14+
private static class Pair {
15+
TreeNode tree;
16+
int level;
17+
18+
Pair(TreeNode tree, int level) {
19+
this.tree = tree;
20+
this.level = level;
21+
}
22+
}
23+
24+
public List<List<Integer>> levelOrderBottom(TreeNode root) {
25+
List<List<Integer>> levels = new ArrayList<>();
26+
if (root == null) {
27+
return levels;
28+
}
29+
30+
LinkedList<Pair> queue = new LinkedList<>();
31+
queue.add(new Pair(root, 0));
32+
List<Integer> level = new ArrayList<>();
33+
int currentLevel = 0;
34+
35+
while (!queue.isEmpty()) {
36+
Pair pair = queue.pop();
37+
if (pair.level > currentLevel) {
38+
levels.add(level);
39+
level = new ArrayList<>();
40+
currentLevel = pair.level;
41+
}
42+
level.add(pair.tree.val);
43+
addChildrenToQueue(pair, queue);
44+
}
45+
levels.add(level);
46+
Collections.reverse(levels);
47+
return levels;
48+
}
49+
50+
private static void addChildrenToQueue(Pair pair, Queue<Pair> queue) {
51+
if (pair.tree.left != null) {
52+
queue.add(new Pair(pair.tree.left, pair.level + 1));
53+
}
54+
if (pair.tree.right != null) {
55+
queue.add(new Pair(pair.tree.right, pair.level + 1));
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)