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