Leetcode102. 二叉树的层序遍历(经典dfs)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode102. 二叉树的层序遍历(经典dfs)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
解题思路
这是一道非常经典的dfs题目。我们每次都将节点加入队列,然后通过队列去寻找节点的左右子节点,如果存在就加入队列。使用队列能保证他们的顺序。具体思路看代码。
代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
Deque<TreeNode> queue = new LinkedList<>();
if(root == null) //特判
return ans;
queue.offer(root); //将root加入队列
while(!queue.isEmpty()) { //如果队列不为空就代表还有节点在队列中
List<Integer> res = new ArrayList<>(); //储存每一层的答案
int size = queue.size(); //一定要先记录队列大小,因为要把上一层的所有元素全部遍历出队
for(int i = 0; i < size; i++) {
TreeNode t = queue.poll(); //出队
res.add(t.val); //加入答案
if(t.left != null) //如果有左节点加入队列
queue.offer(t.left);
if(t.right != null) //如果有右节点加入队列
queue.offer(t.right);
}
ans.add(res); //加入每一层的答案
}
return ans;
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
以上是关于Leetcode102. 二叉树的层序遍历(经典dfs)的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# leetcode-102. 二叉树的层序遍历