题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路
BFS 广度优先遍历
借用队列
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null){
return res;
}
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(! que.isEmpty()){
List<Integer> item = new ArrayList<>();
int size = que.size();
while(size>0){
TreeNode temp = que.poll();
if (temp.left != null) {
que.offer(temp.left);
}
if (temp.right != null){
que.offer(temp.right);
}
item.add(temp.val);
size--;
}
res.add(item);
}
return res;
}
}
DFS 深度优先遍历
class Solution {
public List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
dfs(root, 0);
return res;
}
public void dfs(TreeNode node, Integer deep){
if (node == null) return;
deep++;
if(res.size() < deep){
//deep 表示层数
List<Integer> item = new ArrayList<>();
res.add(item);
}
res.get(deep-1).add(node.val);//直接根据索引加到对应的位置上
dfs(node.left, deep);
dfs(node.right, deep);
}
}