《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和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用一个栈实现另一 ...
随机推荐
- 基于Android Classic Bluetooth的蓝牙聊天软件
代码地址如下:http://www.demodashi.com/demo/12133.html BluetoothChat 基于Android Classic Bluetooth的蓝牙聊天软件,目前仅 ...
- ubuntu安装firefox的flash插件
1.下载插件 https://get.adobe.com/cn/flashplayer/ 下载tar.gz文件 2.解压缩 切换到下载目录,如果是默认下载的话,用 cd ~/下载/解压缩下载的文件 t ...
- oracle数据库权限管理
权限管理: oracle 9里面默认的三个username和password: sys change_on_install //权限最高的管理员 system manager //普通的管理员 sco ...
- 【.net项目中。。】.net一般处理程序使用方法
1.基本原理图 IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHa ...
- TCP是如何保证包的顺序传输
转自:http://blog.csdn.net/ggxxkkll/article/details/7894112 大家都知道,TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化(这看起来非常烦 ...
- BGP双线的真真假假
BGP双线的真真假假: 国内不少IDC服务商都号称自己是“真正的双线”.“双线单IP”.“全路由双线”,但是,这其中有没有水分?他们都是BGP双线?BGP的门槛真的这么低吗? 首先,要构建真正的BGP ...
- docker 让容器执行命令 与 进入容器交互
直接执行命令docker exec mynginx cat /etc/nginx/nginx.conf 进入容器交互docker exec -it 80nginx /bin/bash
- linux系统下面ftp的一些命令
service vsftpd restart重启vsftpd服务service vsftpd stop停止vsftpd服务service vsftpd start启动vsftpd服务 chkconfi ...
- SpringCloud系列五:为Eureka Server添加用户认证及元数据
1. 回顾 上一篇博客讲解了Eureka集群及将微服务注册到集群上.在前面的讲解中,Eureka Server都是允许匿名访问的,本次将讲解如何构建一个需要登录才能访问的Eureka Server. ...
- php正則表達式中的非贪婪模式匹配的使用
php正則表達式中的非贪婪模式匹配的使用 通常我们会这么写: $str = "http://www.baidu/.com? url=www.sina.com/"; preg_mat ...