从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
层次遍历
时间复杂度O(N):N为二叉树的节点数量
空间复杂度O(N):最差情况下,即当前树为平衡二叉树是,最多有N/2个树节点同时在queue中,使用O(N)大小的额外空间
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
if(root != null)
queue.offer(root);
List<List<Integer>> list = new LinkedList<>();
while(!queue.isEmpty()){
List<Integer> list2 = new LinkedList<>();
//这里由于queue.size()在每次循环过程中都在变化,所以应该从大往小遍历
for(int i = queue.size(); i > 0; i--){
TreeNode node = queue.poll();
list2.add(node.val);
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
list.add(list2);
}
return list;
}
}