二叉树的从上往下打印、以及二叉树的之字形打印

前言

按照从上往下的顺序、之字形的顺序将数据存储到ArrayList

package com.datastructure.二叉树.应用场景;

import com.datastructure.utils.GenerateBinaryTree;
import com.datastructure.utils.Node;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class 从上往下打印二叉树 {
    static Queue<Node> queue01 = new LinkedList<>();
    static Queue<Node> queue02 = new LinkedList<>();
    static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) {
        Node head = GenerateBinaryTree.generateBinaryTree();
        if (head == null) {
            System.out.println("链表为空");
        } else {
            queue01.add(head);
            printQueue2();
        }

        System.out.println(list.toString());
    }

    /**
     * 存入一个数组,一行打印
     * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
     */
    private static void printQueue() {
        while (!queue01.isEmpty()) {
            Node curNode = queue01.poll();
            list.add(curNode.val);
            if (curNode.left != null) queue01.add(curNode.left);
            if (curNode.right != null) queue01.add(curNode.right);
        }
    }

    /**
     * 借用两个队列,分行打印
     *1
     * 2	3
     * 4	5	6	7
     * 8	9	10	11	12	13	14	15
     * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
     */
    private static void printQueue2() {
        while (!queue01.isEmpty() || !queue02.isEmpty()) {
            while (!queue01.isEmpty()){
                Node curNode = queue01.poll();
                list.add(curNode.val);
                System.out.print(curNode.val+"\t");
                if (curNode.left != null) queue02.add(curNode.left);
                if (curNode.right != null) queue02.add(curNode.right);
            }
            System.out.println();
            while (!queue02.isEmpty()){
                Node curNode = queue02.poll();
                list.add(curNode.val);
                System.out.print(curNode.val+"\t");
                if (curNode.left != null) queue01.add(curNode.left);
                if (curNode.right != null) queue01.add(curNode.right);
            }
            System.out.println();
        }
    }
}
import com.datastructure.utils.GenerateBinaryTree;
import com.datastructure.utils.Node;

import java.util.*;

public class 之字形打印二叉树 {
    static List<Integer> list = new ArrayList<>();
    static Stack<Node> stackRev = new Stack<>();
    static Stack<Node> stackSeq = new Stack<>();

    public static void main(String[] args) {
        Node head = GenerateBinaryTree.generateBinaryTree();
        if (head == null) {
            System.out.println("二叉树为空");
            return;
        } else {
            stackRev.add(head);
            printStack();
        }
        System.out.println(list.toString());

        /**
         * 1	
         * 2	3	
         * 7	6	5	4	
         * 8	9	10	11	12	13	14	15	
         * [1, 2, 3, 7, 6, 5, 4, 8, 9, 10, 11, 12, 13, 14, 15]
         *
         */
    }

    private static void printStack() {
        while (!stackRev.isEmpty() || !stackSeq.isEmpty()) {
            while (!stackRev.isEmpty()){
                Node curNode = stackRev.pop();
                list.add(curNode.val);
                System.out.print(curNode.val+"\t");
                if (curNode.right != null) stackSeq.add(curNode.right);
                if (curNode.left != null) stackSeq.add(curNode.left);
            }
            System.out.println();
            while (!stackSeq.isEmpty()){
                Node curNode = stackSeq.pop();
                list.add(curNode.val);
                System.out.print(curNode.val+"\t");
                if (curNode.left != null) stackRev.push(curNode.left);
                if (curNode.right != null) stackRev.push(curNode.right);
            }
            System.out.println();
        }
    }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值