zoukankan      html  css  js  c++  java
  • 《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和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("
    ");
            System.out.println("ZigZag打印");
            chapter.zigZagPrint(head);
        }
    }
    

    结果

  • 相关阅读:
    CentOS 7 使用NVM管理nodejs(转)
    Linux下Git安装及配置 (转)
    linux添加计划任务(转载)
    centos编译libcurl库找不到ssl的问题
    windows下搭建nginx+php+虚拟主机配置过程(转)
    xocde中宏定义使用
    unity shader vs高亮提示插件
    xcode8 自动打包
    3DMax中如何刷顶点色
    Adreno Profiler调试注意事项
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/8836149.html
Copyright © 2011-2022 走看看