package com.justalk.javademo.leetcode
import java.util.ArrayList
import java.util.Stack
/**
* 之字形打印二叉树
* 1
* 23
* 4567
* 8.。。15
*
* 1 3 2 4567 15.。。8
*/
public class Printer {
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode(1)
TreeNode treeNode2 = new TreeNode(2)
TreeNode treeNode3 = new TreeNode(3)
TreeNode treeNode4 = new TreeNode(4)
TreeNode treeNode5 = new TreeNode(5)
TreeNode treeNode6 = new TreeNode(6)
TreeNode treeNode7 = new TreeNode(7)
TreeNode treeNode8 = new TreeNode(8)
TreeNode treeNode9 = new TreeNode(9)
TreeNode treeNode10 = new TreeNode(10)
TreeNode treeNode11 = new TreeNode(11)
TreeNode treeNode12 = new TreeNode(12)
TreeNode treeNode13 = new TreeNode(13)
TreeNode treeNode14 = new TreeNode(14)
TreeNode treeNode15 = new TreeNode(15)
treeNode1.left = treeNode2
treeNode1.right = treeNode3
treeNode2.left = treeNode4
treeNode2.right = treeNode5
treeNode3.left = treeNode6
treeNode3.right = treeNode7
treeNode4.left = treeNode8
treeNode4.right = treeNode9
treeNode5.left = treeNode10
treeNode5.right = treeNode11
treeNode6.left = treeNode12
treeNode6.right = treeNode13
treeNode7.left = treeNode14
treeNode7.right = treeNode15
ArrayList<ArrayList<Integer>> print = print(treeNode1)
print.stream().forEach(System.out::println)
}
public static class TreeNode {
public TreeNode(int val ) {
this.val = val
}
int val
TreeNode left
TreeNode right
}
public static ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>()
if (pRoot == null) return list
Stack<TreeNode> stack1 = new Stack<>()
Stack<TreeNode> stack2 = new Stack<>()
stack2.add(pRoot)
while (!stack2.isEmpty() || !stack1.isEmpty()) {
ArrayList<Integer> subList = new ArrayList<>()
if (!stack2.isEmpty()) {
while (!stack2.isEmpty()) {
TreeNode curNode = stack2.pop()
subList.add(curNode.val)
if (curNode.left != null) stack1.add(curNode.left)
if (curNode.right != null) stack1.add(curNode.right)
}
list.add(subList)
} else {
while (!stack1.isEmpty()) {
TreeNode curNode1 = stack1.pop()
subList.add(curNode1.val)
if (curNode1.right != null) stack2.add(curNode1.right)
if (curNode1.left != null) stack2.add(curNode1.left)
}
list.add(subList)
}
}
return list
}
}