题目: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
递归法(DFS): 递归的方法传入一个标记行数的参数numbers
来判断行数。
class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) return list;
dfs(root,0);
return list;
}
void dfs(TreeNode node, Integer numbers){
if(list.size() == numbers) list.add(new ArrayList<>());
list.get(numbers).add(node.val);
if(node.left != null)
dfs(node.left,numbers+1);
if(node.right != null)
dfs(node.right,numbers+1);
}
}
BFS
使用队列存储节点数据,利用先进先出的特性实现层序遍历
void bfs(TreeNode root){
int num = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int n = queue.size(); //队列存储数据的个数
list.add(new ArrayList<>()); //为每一行都新建一个ArrayList对象
for(int i = 0; i < n; i++ ){
TreeNode node = queue.poll(); //出队 先进先出
list.get(num).add(node.val); //添加数据
if(node.left != null){
queue.offer(node.left); //节点的左子树入队
}
if(node.right != null){
queue.offer(node.right);
}
}
num++;
}
}