题目

二叉树按层打印和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打印的更多相关文章

  1. 《程序员代码面试指南》第一章 栈和队列 最大值减去最小值小于或等于num的数量

    题目 给定整数数组arr和整数num,共返回多少的数组满足如下情况 max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j])表示数组arr ...

  2. 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree

    题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...

  3. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

  4. 《程序员代码面试指南》第二章 链表问题 将单链表每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 ...

  5. 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点

    题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...

  6. 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点

    题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...

  7. [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)

    题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 ...

  8. 程序员代码面试指南 IT名企算法与数据结构题目最优解

    原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...

  9. 程序员代码面试指南:IT名企算法与数据结构题目最优解

      第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...

随机推荐

  1. SQL 怎样 远程备份数据库到本地

    SQL 怎样 远程备份数据库到本地 --1.启用xp_cmdshell USE master EXEC sp_configure 'show advanced options', 1 RECONFIG ...

  2. mongoDB 索引的用法

    http://www.cnblogs.com/lipan/archive/2011/03/28/1997202.html MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的, ...

  3. The Application does not have a valid signature

    真机运行程序,报错(The application does not have a valid signature,如图 环境:Xcode7.3,使用cocoapods管理第三方库 如果确认证书没有问 ...

  4. xml格式发送

    1. namespace xml格式发送 { /// <summary> /// 实体转Xml,Xml转实体类 /// </summary> /// <typeparam ...

  5. squid cache 服务器端的安装,配置

    一,什么squid Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率.Squid不仅支持HTTP协议, 还支持FTP.gopher.SSL和WA ...

  6. $on、$emit和$broadcast的使用

    $emit只能向parent controller传递event与data( $emit(name, args) ) $broadcast只能向child controller传递event与data ...

  7. linux上复制行到另一个文件

    1.复制3行到5行数据到ab.sh文件,不覆盖ab.sh文件中的已有内容 :3,5w>>ab.sh 2.复制3行到5行数据到ab.sh文件,覆盖ab.sh文件中的已有内容 :3,5w!ab ...

  8. FP Tree算法原理总结(转载)

    FP Tree算法原理总结 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题 ...

  9. python 装饰器 (个人理解就是前置的内建函数)

    感谢有篇文件详细介绍[简单 12 步理解 Python 装饰器]http://python.jobbole.com/85056/ 1.首先介绍内建函数 2.转换为装饰器 3.执行顺序 4.装饰器实用

  10. 多媒体开发之rtp 打包发流---同网段其他机子sdp 播放不了

    (1) (2) (3) -------------author:pkf ------------------time:2015-1-6 后面发现是connection 的server 地址是指定的 导 ...