107. Binary Tree Level Order Traversal II

LeetCode

Tree, BFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
Queue<TreeNode> q=new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
List<Integer> tmp=new ArrayList<>();
int qSize=q.size();
while(qSize>0){
TreeNode tmpNode=q.poll();
tmp.add(tmpNode.val);
if(tmpNode.left!=null) q.offer(tmpNode.left);
if(tmpNode.right!=null) q.offer(tmpNode.right);
qSize--;
}
res.add(0,tmp);
}
return res;
}
}

DFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
List<List<Integer>> levels = new ArrayList<List<Integer>>();

public void util(TreeNode node, int level) {
// start the current level
if (levels.size() == level) levels.add(new ArrayList<Integer>());

// append the current node value
levels.get(level).add(node.val);

// process child nodes for the next level
if (node.left != null) util(node.left, level + 1);
if (node.right != null) util(node.right, level + 1);
}

public List<List<Integer>> levelOrderBottom(TreeNode root) {
if (root == null) return levels;
util(root, 0);
Collections.reverse(levels);
return levels;
}
}

0%