剑指offer系列33-----把二叉树打印成多行
【题目】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
方法一:直接打印
package com.exe7.offer; import java.util.LinkedList;
import java.util.Queue; /**
* 【题目】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
* @author WGS
*
*/
public class PrintBiTreeFromTopToBottom {
static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val){
this.val=val;
}
} public void printBiTreeFromTopToBottom(TreeNode headNode){
if(headNode==null) return ;
int nextLevelNodes=0;
int toBoPrint=1;//设置个初始值
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(headNode);
while(!queue.isEmpty()){
//1 打印
TreeNode curNode=queue.poll();
System.out.print(curNode.val+" "); //2 添加左右结点
if(curNode.left!=null){
queue.add(curNode.left);
nextLevelNodes++;//下层要打印的结点数+1
}
if(curNode.right!=null){
queue.add(curNode.right);
nextLevelNodes++;//下层要打印的结点数+1
}
//左右结点添加完后即打印完本层一个结点值,自动减1(要判断本层是否还有别的值)
--toBoPrint;
if(toBoPrint==0){//本层打印完
System.out.println();//换行
toBoPrint=nextLevelNodes;//下层要打印的结点数
nextLevelNodes=0;//清0
}
} }
public static void main(String[] args) {
PrintBiTreeFromTopToBottom p=new PrintBiTreeFromTopToBottom();
TreeNode root = new TreeNode(8);
TreeNode node1 = new TreeNode(6);
TreeNode node2 = new TreeNode(10);
TreeNode node3 = new TreeNode(5);
TreeNode node4 = new TreeNode(7);
TreeNode node5 = new TreeNode(9);
TreeNode node6 = new TreeNode(11); root.left = node1;
root.right = node2;
node1.left = node3;
node1.right = node4;
node2.left = node5;
node2.right = node6; p.printBiTreeFromTopToBottom(root);
} }
方法二:使用博主的方法(面试时候推荐此种方法,个别代码差异,思想一样)
package com.exe7.offer; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue; /**方法二:使用博主的方法(面试时候推荐此种方法,个别代码差异,思想一样)
* 【题目】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
* @author WGS
*
*/
public class PrintBiTreeFromTopToBottom2 {
static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val){
this.val=val;
}
} public ArrayList<ArrayList<Integer>> printBiTreeFromTopToBottom(TreeNode headNode){
ArrayList<ArrayList<Integer>> list=new ArrayList<>();//接收总共行的结点
ArrayList<Integer> nodeList=new ArrayList<>();//接收每行结点
if(headNode==null) return list;
int nextLevelNodes=0;//下层要打印的结点数
int toBoPrint=1;//设置个初始值
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(headNode);
while(!queue.isEmpty()){
//1 打印
TreeNode curNode=queue.poll();
//System.out.print(curNode.val+" ");
nodeList.add(curNode.val);
//2 添加左右结点
if(curNode.left!=null){
queue.add(curNode.left);
nextLevelNodes++;//下层要打印的结点数+1
}
if(curNode.right!=null){
queue.add(curNode.right);
nextLevelNodes++;//下层要打印的结点数+1
}
//左右结点添加完后即打印完本层一个结点值,自动减1(要判断本层是否还有别的值)
--toBoPrint;
if(toBoPrint==0){//本层打印完
//System.out.println();//换行
list.add(nodeList);
toBoPrint=nextLevelNodes;//下层要打印的结点数
nextLevelNodes=0;//清0
nodeList=new ArrayList<>();
}
}
return list; }
public static void main(String[] args) {
PrintBiTreeFromTopToBottom2 p=new PrintBiTreeFromTopToBottom2();
TreeNode root = new TreeNode(8);
TreeNode node1 = new TreeNode(6);
TreeNode node2 = new TreeNode(10);
TreeNode node3 = new TreeNode(5);
TreeNode node4 = new TreeNode(7);
TreeNode node5 = new TreeNode(9);
TreeNode node6 = new TreeNode(11); root.left = node1;
root.right = node2;
node1.left = node3;
node1.right = node4;
node2.left = node5;
node2.right = node6; ArrayList<ArrayList<Integer>> getList=p.printBiTreeFromTopToBottom(root);
for (ArrayList<Integer> arrayList : getList) {
System.out.println(arrayList);
}
} }
剑指offer系列33-----把二叉树打印成多行的更多相关文章
- 剑指offer系列32-----对称二叉树的判断
[题目]请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. package com.exe7.offer; /** * [题目]请实现一个函 ...
- 剑指offer系列53---字符串转化成整数
[题目]将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 * []整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1 ...
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...
- 剑指Offer:二叉树打印成多行【23】
剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...
- 把二叉树打印成多行 牛客网 剑指Offer
把二叉树打印成多行 牛客网 剑指Offer 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行 # class TreeNode: # def __init__(self, x) ...
- 【剑指Offer】把二叉树打印成多行 解题报告(Python)
[剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 干货 | 剑指offer系列文章汇总
下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现 剑指offer系列 始 剑指offer—灯管问题(1) 剑指offer—10人电梯(2) ...
- 《剑指offer》从尾到头打印链表
本题来自<剑指offer> 从尾到头打印链表 题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 方案一:首先遍历到尾部,然后从尾部进行到头值进行操作,后进先 ...
- 剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...
随机推荐
- (实用篇)php处理单文件、多文件上传代码分享
php处理 单文件.多文件上传实例代码,供大家参考,具体内容如下 后台处理文件submit_form_process.php <?php /************************** ...
- 对UICollectionView的学习
UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableVie ...
- hdu2955 Robberies 01背包+概率
link:http://acm.hdu.edu.cn/showproblem.php?pid=2955 首先,这个题目的背包容量不能是概率.1.精度不清楚.2.把概率相加有什么意义呢?所以,转换一下, ...
- DIV的圆角表现和TAB切换
内容大体是从网上找过来的,感觉那位哥们说的对,css还是比较靠谱的,当然有些高玩搞出来的东西本地 没有运行起来. 把自己的应用贴出来同大家分享 <html> <head> &l ...
- Codeforces Round #151 (Div. 2)
A. Buggy Sorting \(n \ge 3\)时,序列\(n.n-1.\cdots.1\)即可. B. Increase and Decrease 考虑和是否能被\(n\)整除. C. Be ...
- 1-3 ISO/OSI七层模型详解
一.物理层 1.负责设备之间的比特流的传输.物理接口.电气特性等. <1>物理接口:网线接口型号.音频线接口型号.视频线接口型号等 <2>电气特性:例如网线总共8根线,这8根线 ...
- php遇见的错误(一)
1.linux 执行脚本时报的错 Call to a member function on a non-object in 是没有实例化对象 解决方法 new类2.在给一个表增加一个新字段或者改 ...
- 附录三 嵌入式C程序的编译与调试
课程回顾 C语言库的特性和发展 C语言库的常用库函数 标准库函数的特色应用 git@github.com:Kevin-Dfg/Data-Structures-and-Algorithm-Analysi ...
- JS/JQuery控制图片宽度
function changeImgWidth(){ for (i = 0; i <$('#info img').length; i++) { var imgWidth=$('#info img ...
- C# 控件缩写大全+命名规范+示例
如有转载,请注明出处:http://www.cnblogs.com/flydoos/archive/2011/08/29/2158903.html C# 控件缩写大全+命名规范+示例 写程序的时候突然 ...