107. Binary Tree Level Order Traversal II

Solution1:广度优先
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
List<List<Integer>> wrap = new LinkedList<>();
if (root == null) return wrap;
q.offer(root);
while (!q.isEmpty()) {
int num = q.size();
List<Integer> sub = new LinkedList<>();
for (int i = 0; i < num; i++) {
TreeNode n1 = q.poll();
if (n1.left != null) q.offer(n1.left);
if (n1.right != null) q.offer(n1.right);
sub.add(n1.val);
}
wrap.add(0, sub);
}
return wrap;
}
}
Solution2:深度优先
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> wrap = new LinkedList<>();
LevelMaker(wrap, root, 0);
return wrap;
}
public void LevelMaker(List<List<Integer>> list, TreeNode root, int level) {
if (root == null) return;
if (level >= list.size()) {
list.add(0, new LinkedList<>()); //先创建空的链表,最后再加入值
}
LevelMaker(list, root.left, level + 1);
LevelMaker(list, root.right, level + 1);
list.get(list.size() - 1 - level).add(root.val); //level和对应链表的位置:2-0;1-1;0-2,和为list.size()-1
}
}
浙公网安备 33010602011771号