Problem: 102. 二叉树的层序遍历
解题方法
1: 递归法
2: 迭代法
递归法
public void fun01(TreeNode root, Integer deep) {
if (root == null) {
return;
}
deep++;
//如果list小于深度 则list的数目应该增加
if (list.size() < deep) {
List<Integer> s_list = new ArrayList<>();
list.add(s_list);
}
list.get(deep - 1).add(root.val);
fun01(root.left, deep);
fun01(root.right, deep);
}
迭代法
class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
fun02(root);
return list;
}
public void fun02(TreeNode root) {
if (root == null) {
return;
}
//使用队列
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
ArrayList<Integer> s_list = new ArrayList<>();
int len = queue.size();
while (len > 0) {
TreeNode node = queue.poll();
s_list.add(node.val);
if (node.left!=null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
len--;
}
list.add(s_list);
}
}
}