1.题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
2.算法描述
就是二叉树的层序遍历,套用层序遍历模板就可以。就是二叉树的层序遍历,套用层序遍历模板就可以。就是二叉树的层序遍历,套用层序遍历模板就可以。
只是注意这里是每一层放在一个列表中,返回的结果是列表的列表。只是注意这里是每一层放在一个列表中,返回的结果是列表的列表。只是注意这里是每一层放在一个列表中,返回的结果是列表的列表。
那就在遍历每一层的时候,\red{那就在遍历每一层的时候,}那就在遍历每一层的时候,先记录当前队列中的元素个数(当前队列中的元素个数就是某一层元素个数),具体见代码。\red{先记录当前队列中的元素个数(当前队列中的元素个数就是某一层元素个数),具体见代码。}先记录当前队列中的元素个数(当前队列中的元素个数就是某一层元素个数),具体见代码。
3.代码描述
3.1.Java代码
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
if(pRoot == null) return ans;
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<Integer> temp = null;
queue.offer(pRoot);
while(!queue.isEmpty()){
int cnt = 0, len = queue.size();
temp = new ArrayList<>();
while(cnt++ < len){
TreeNode node = queue.poll();
temp.add(node.val);
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
ans.add(temp);
}
return ans;
}
}
3.2.Python代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
ans = []
if not pRoot:
return ans
queue = []
queue.append(pRoot)
while queue:
cnt = 0
size = len(queue)
row = []
while cnt<size:
node = queue.pop(0)
row.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
cnt += 1
ans.append(row)
return ans