版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/82312963
我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/
题目描述:
知识点:二叉树的层序遍历
思路:每一轮操作中记录队列的size,每出队size个节点后保存进一个List集合
如果只是普通的二叉树的层序遍历,毫无难度。而本题的难点在于,我们要将层序遍历的结果分层放在各个List集合中。
在满足队列不为空条件的这个外循环里,我们先记录每一层的节点个数,即此时队列中存放的节点个数,记作size。我们将每出队操作size个节点后的结果保存进一个List集合里,这样就实现了分层存放的目的。
整个过程中,注意入队之前要判断入队的节点是否为null。
时间复杂度是O(n)级别的,其中n为二叉树中的节点个数。由于队中的元素个数最多为(2 ^ h)个,其中h为树的高度,因此空间复杂度为O(2 ^ h)级别的。
JAVA代码:
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> listList = new ArrayList<>();
if(root == null) {
return listList;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
while(size > 0) {
TreeNode tempNode = queue.poll();
list.add(tempNode.val);
if(tempNode.left != null) {
queue.add(tempNode.left);
}
if(tempNode.right != null) {
queue.add(tempNode.right);
}
size--;
}
listList.add(list);
}
return listList;
}
}
LeetCode解题报告: