题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[3],[9,20],[15,7]]
题解
方式一:BFS
一次性把整层处理完再处理下一层
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new LinkedList<>();
if (root == null) {
return result;
}
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
while (!deque.isEmpty()) {
int size = deque.size();
List<Integer> list = new LinkedList<>();
// 处理当前层数据
while (size > 0) {
TreeNode node = deque.poll();
list.add(node.val);
// 保证从左到右
if (node.left != null) {
deque.offer(node.left);
}
if (node.right != null) {
deque.offer(node.right);
}
size--;
}
result.add(list);
}
return result;
}
方式二:DFS
单独处理每个节点,放入对应层
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new LinkedList<>();
dfs(root, 0, result);
return result;
}
public void dfs(TreeNode node, int deep, List<List<Integer>> result) {
// 结束递归条件
if (node == null) {
return;
}
// 计算当前节点的层数
deep++;
if (result.size() < deep) {
List<Integer> list = new LinkedList<>();
result.add(list);
}
// 放入对应层数集合
result.get(deep - 1).add(node.val);
// 保证从左到右
dfs(node.left, deep, result);
dfs(node.right, deep, result);
}
总结
算法:BFS、DFS