题目

二叉树按层打印和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. 【海盗派测试分析MFQ&PPDCS】读书笔记

    使用脑图花了一张读书笔记,可能有点长

  2. 排序算法 C++代码实现

    插入排序: 就像摸牌,摸一张插进去,找一个哨兵.从第二个開始,和前一个比較.小的话前移一位. #include <iostream> #include<stdlib.h> us ...

  3. Vim使用个人心得

    个人最近在Windows上使用gVim 1.移动光标 h,j,k,l 键为左,下,上,右,方向键,控制光标移动,插入状态下不可用,插入状态下,按V键进入查看状态,可使用. 2.进入编辑模式:按 i 键 ...

  4. 搭建属于你的家庭网络实时监控–HTML5在嵌入式系统中的应用&#183;高级篇

    *本文已刊登在<无线电>2014年第6期 <搭建属于你的在线实时採集系统>中已经对HTML5平台有了初步的认识,并基于此向大家展示了怎样将採集到的数据上传至网络.实现实时观測. ...

  5. hive beeline 的server启动与连接

    启动hiveServer2 启动beeline之后 连接 !connect jdbc:hive2://localhost:10000/default 启动的时候连接 /beeline -u jdbc: ...

  6. C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  7. linux下性能测试工具netperf使用

    一.功能简介 netperf是一款针对网络性能的测试工具,主要基于TCP或UDP的传输.根据应用的不同,可以进行批量数据传输(bulk data transfer)模式和请求/应答(request/r ...

  8. ubuntu防火墙 ufw配置

    https://www.cnblogs.com/ylan2009/articles/2321136.html

  9. 【Mac系统 + Mysql】之安装Mysql数据库

    安装Mysql步骤: 一.下载 参考文章<mac 安装MySQL> 到Mysql官网下载.dmg格式的文件 先放弃了,看下面的简易安装. 二.使用homebrew安装MySQL(推荐) 如 ...

  10. 使用 SourceTree 遇到冲突的解决方法

    首先,更新代码之前先 git stash ,然后 git pull ,再 git stash pop 这时候如果本地改的代码跟线上的冲突了,就报错了.那么就需要手动解决冲突. 打开存在冲突的文件,会看 ...