Code Interview Guide for Programmers Chapter 3 Binary Tree Problems Binary Tree Printing by Layer and ZigZag Printing

topic

二叉树按层打印和ZigZag打印

java code

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);
    }
}

result

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324453130&siteId=291194637