前言
按照从上往下的顺序、之字形的顺序将数据存储到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();
}
}
}