《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和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用一个栈实现另一 ...
随机推荐
- 定制一个类似地址选择器的view
代码地址如下:http://www.demodashi.com/demo/12832.html 前言: 这几天也是闲来无事,看看有什么和Scroller相关的控件需要巩固下,原因很简单,前几天看到相关 ...
- 操作LOG文件-删除log目录下,所有的空文件-删除5天前的文件
# 1.logs目录下,有一部分文件是空的# 1.删除log目录下,所有的空文件# 2.删除5天前的文件 # 需求分析:# 1.os.walk()获取到所在以.log结尾的文件# 2.判断文件的大小, ...
- hdu3685(几何重心与凸包结合)
题意:给一个多边形(有可能是凹多边形).问有多少种可以使得它稳定放置的方式.当然稳定的原则就是重心做垂线在支撑点之内. 解法:由于有可能是凹多边形,所以先求出多边形的凸包,这是在放置时候会接触地面的全 ...
- PHP curl post header
第三方教程推荐:https://www.cnblogs.com/CHEUNGKAMING/p/5717429.html
- file_put_contents执行返回false,file_put_contents false(linux服务器httpd)
file_put_contents执行返回false,file_put_contents false(linux服务器httpd) 默认下selinux是开启的查看SELinux状态:1./usr/s ...
- linux之ftp命令详解
我们在使用ftp客户端访问到ftp服务器之后,往往需要进行相关操作,比如从远程机器上下载文件,或者将文件传输到远程机器上.需要使用ftp的相关命令,本文讲述了ftp常用的一些操作. 方法/步骤 ...
- leetcode第一刷_Binary Tree Zigzag Level Order Traversal
以出现的频率来看.树的层序遍历一定是考察的重点,除非工作人员想找题水数量. zigzag,还是有几道题的,层序的这个非常easy,假设是奇数层.reverse下面就可以.无他.我写的时候预计还不知道这 ...
- C# 为枚举创建新方法
可以使用扩展方法添加特定于某个特定枚举类型的功能. 示例在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分.该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中, ...
- 简洁方便的集合处理——Java 8 stream流
背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...
- PowerBuilder--Aes128加解密
通过C#开发Com控件,注册到系统,然后由pb通过OLEObject进行调用 原文:https://www.cnblogs.com/eric_ibm/archive/2012/07/06/dll.ht ...