题目
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,即第一行按照从左到右的顺序打印,第二层按照从右到左顺序打印,第三行再按照从左到右的顺序打印,其他以此类推。
实现
public class Solution61 {
public static void printtree(BinaryTreeNode root) {
if (root == null) {
return;
}
Stack<BinaryTreeNode> current = new Stack<BinaryTreeNode>();
Stack<BinaryTreeNode> reverse = new Stack<BinaryTreeNode>();
int flag = 0;
BinaryTreeNode node;
current.add(root);
while (!current.isEmpty()) {
// 从最后一个开始取
node = current.pop();
System.out.printf("%-3d", node.value);
// 当前是从左往右打印的,那就按从左往右入栈
if (flag == 0) {
if (node.left != null) {
reverse.push(node.left);
}
if (node.right != null) {
reverse.push(node.right);
}
}
// 当前是从右往左打印的,那就按从右往左入栈
else {
if (node.right != null) {
reverse.push(node.right);
}
if (node.left != null) {
reverse.push(node.left);
}
}
if (current.isEmpty()) {
flag = 1 - flag;
Stack<BinaryTreeNode> tmp = current;
current = reverse;
reverse = tmp;
System.out.println();
}
}
}
}