《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和ZigZag打印
题目
二叉树按层打印和ZigZag打印
java代码
package com.lizhouwei.chapter3;
import java.util.LinkedList;
import java.util.Queue;
/**
* @Description:二叉树按层打印和ZigZag打印
* @Author: lizhouwei
* @CreateDate: 2018/4/14 21:47
* @Modify by:
* @ModifyDate:
*/
public class Chapter3_9 {
public void levelPrint(Node head){
if(head==null){
return;
}
Queue<Node> queue = new LinkedList<Node>();
queue.offer(head);
System.out.print("level1:");
Node nlast =null;
Node last=head;
int level= 1;
while (!queue.isEmpty()){
head = queue.poll();
System.out.print(head.value+" ");
if(head.left!=null){
queue.offer(head.left);
nlast = head.left;
}
if(head.right!=null){
queue.offer(head.right);
nlast = head.right;
}
if(last ==head&& !queue.isEmpty()){
last = nlast;
System.out.println();
System.out.print("level"+(++level)+":");
}
}
}
public void zigZagPrint(Node head){
if (head==null){return;}
LinkedList<Node> dqueue = new LinkedList<Node>();
dqueue.offerFirst(head);
boolean lr = true;
Node nlast =null;
Node last=head;
int level=1;
System.out.print("level1:");
while (!dqueue.isEmpty()){
if(lr){
head =dqueue.pollFirst();
if(head.left!=null){
dqueue.offerLast(head.left);
nlast= nlast==null? head.left:nlast;
}
if(head.right!=null){
dqueue.offerLast(head.right);
nlast= nlast==null? head.right:nlast;
}
}else{
head =dqueue.pollLast();
if(head.right!=null){
dqueue.offerFirst(head.right);
nlast= nlast==null?head.right:nlast;
}
if(head.left!=null){
dqueue.offerFirst(head.left);
nlast= nlast==null?head.left:nlast;
}
}
System.out.print(head.value+" ");
if(last==head && !dqueue.isEmpty()){
last =nlast;
nlast =null;
lr =!lr;
System.out.println();
System.out.print("level"+(++level)+":");
}
}
}
//测试
public static void main(String[] args) {
Chapter3_9 chapter = new Chapter3_9();
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Node head = NodeUtil.generTree(arr, 0, arr.length - 1);
System.out.println("层打印");
chapter.levelPrint(head);
System.out.println("\n");
System.out.println("ZigZag打印");
chapter.zigZagPrint(head);
}
}
结果
《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和ZigZag打印的更多相关文章
- 《程序员代码面试指南》第一章 栈和队列 最大值减去最小值小于或等于num的数量
题目 给定整数数组arr和整数num,共返回多少的数组满足如下情况 max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j])表示数组arr ...
- 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree
题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 《程序员代码面试指南》第二章 链表问题 将单链表每K个节点之间逆序
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Au ...
- 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点
题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)
题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 ...
- 程序员代码面试指南 IT名企算法与数据结构题目最优解
原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...
- 程序员代码面试指南:IT名企算法与数据结构题目最优解
第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...
随机推荐
- iOS 原生二维码扫描和生成
代码地址如下:http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工 ...
- .net 定时服务
namespace MvcApplication1 { public class MvcApplication : System.Web.HttpApplication { protected voi ...
- APP开发关于缓存
1 http://www.cnblogs.com/qianxudetianxia/archive/2012/02/20/2112128.html 1.1 http://blog.csdn.net/ln ...
- mysql用merge合并表
merge合并表的要求 1.合并的表使用的必须是MyISAM引擎 2.表的结构必须一致,包括索引.字段类型.引擎和字符集 实例: create table if not exists user1( i ...
- C# readonly和const的不同以及它的具体用法
在C#中,我们用const来定义常量.常量就是我定义一个变量,这个变量的值在整个软件的生命周期都不变.比如我想求一个圆形的面积,我就可以把π定义成一个常量,因为我事先知道圆周率是就是3.1415926 ...
- java之数字彩虹雨
© 版权声明:本文为博主原创文章,转载请注明出处 数字彩虹雨: 从上至下,随机出现一串字符串,以不同的速度运行到底部:类似于黑客帝国里面的场景 GitHub:https://github.com/Ta ...
- 非常easy学习的JQuery库 : (二) 选择器
作用 选择器同意您对元素组或单个元素进行操作. 在前面的章节中,我们介绍了一些有关怎样选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是怎样准确地选取您希望应用效果的元素. jQuer ...
- 在oracle11g中配置多个DataGuard物理备机
>> from zhuhaiqing.info 主机配置 alter system set DB_UNIQUE_NAME='starboss' scope=spfile; alter sy ...
- 修改NameNode端口后,hive表查询报错
在进行使用hive查询表数据的时候,抛出异常 hive> select*from blackList;FAILED: SemanticException Unable to determine ...
- sublime使用技巧(2)-- 实用插件推荐【持续更新】
1.Auto semicolon 在括号内输入分号,会自动把光标移到行尾然后再输入分号. 2.DocBlockr 补全注析格式,例如在函数上面输入/** + Enter,就会自动补全函数的注析说明. ...