# Q61：按之字形顺序打印二叉树

import java.util.ArrayList;
import java.util.Stack;
import BinaryTree.BinaryTreeNode;
public class Q61按之字形顺序打印二叉树 {
/**
* 题目：按之字形顺序打印二叉树
* 题目说明：请实现一个函数按照之字形顺序打印二叉树，即第一行按照从左到右的顺序打印，第二层按照从右到左的顺序打印，第三行再按照从左到右的顺序打印，依次类推。
* 解题思路：要使用两个栈交替操作来实现打印之字形二叉树，两个栈的入栈顺序恰好相反，stack1的入栈顺序是从左到右，stack2是从右到左。出栈时恰好出现之字形顺序。
*/
public static void main(String[] args) {
BinaryTreeNode root = new BinaryTreeNode();
BinaryTreeNode node1 = new BinaryTreeNode();
BinaryTreeNode node2 = new BinaryTreeNode();
BinaryTreeNode node3 = new BinaryTreeNode();
BinaryTreeNode node4 = new BinaryTreeNode();
BinaryTreeNode node5 = new BinaryTreeNode();
BinaryTreeNode node6 = new BinaryTreeNode();
BinaryTreeNode node7 = new BinaryTreeNode();
BinaryTreeNode node8 = new BinaryTreeNode();
root.leftNode = node1;
root.rightNode = node2;
node1.leftNode = node3;
node1.rightNode = node4;
node2.leftNode = node5;
node2.rightNode = node6;
node3.leftNode = node7;
node3.rightNode = node8;
root.value = 1;
node1.value = 2;
node2.value = 3;
node3.value = 4;
node4.value = 5;
node5.value = 6;
node6.value = 7;
node7.value = 8;
node8.value = 9;
Q61按之字形顺序打印二叉树 test = new Q61按之字形顺序打印二叉树();
test.PrintBinaryTree(root);
}
public void PrintBinaryTree(BinaryTreeNode root){
if(root == null){
return;
}
Stack<BinaryTreeNode> stack1 = new Stack<BinaryTreeNode>();//存放奇数行
Stack<BinaryTreeNode> stack2 = new Stack<BinaryTreeNode>();//存放偶数行
stack2.push(root);//记得根结点入stack2中，否则会出现奇数行和偶数行交错一行
while(stack1.isEmpty() || stack2.isEmpty()){
if(stack1.isEmpty() && stack2.isEmpty()){
break;
}
if(stack2.isEmpty()){
while(!stack1.isEmpty()){//stack1不为空，则出栈并将它的孩子结点从右到左存入到stack2中
if(stack1.peek().rightNode != null){
stack2.push(stack1.peek().rightNode);
}
if(stack1.peek().leftNode != null){
stack2.push(stack1.peek().leftNode);
}
System.out.print(stack1.pop().value+" ");
}
System.out.println();
}else {
while(!stack2.isEmpty()){//stack2不为空，则出栈并将它的孩子结点从左到右存入到stack1中
if (stack2.peek().leftNode != null) {
stack1.push(stack2.peek().leftNode);
}
if (stack2.peek().rightNode != null) {
stack1.push(stack2.peek().rightNode);
}
System.out.print(stack2.pop().value+" ");
}
System.out.println();
}
}
}
}


• 本文已收录于以下专栏：

## 按之字形顺序打印二叉树（剑指offer+队栈的应用）

• u010579068
• 2015年11月05日 14:31
• 1786

## 剑指offer——按之字形顺序打印二叉树

• sbq63683210
• 2016年07月19日 21:23
• 773

## 剑指offer-----按之字形顺序打印二叉树(java版)

• sniperken
• 2016年12月26日 21:02
• 480

## 按之字形顺序打印二叉树（java版）

【题目描述】请实现一个函数按照之字形打印二叉树，即第一行按照从左到右的顺序打印，第二层按照从右至左的顺序打印，第三行按照从左到右的顺序打印，其他行以此类推。【解题思路1】 //1.使用两个栈来分别存...
• ouyangyanlan
• 2017年06月06日 15:08
• 1128

## 按之字形顺序打印二叉树（Java实现）

• zjkC050818
• 2017年06月12日 10:17
• 280

## 【剑指Offer学习】【面试题61：按之字形顺序打印二叉树】

• DERRANTCM
• 2015年07月13日 08:11
• 2736

## 剑指Offer面试题61：按之子型打印二叉树 Java实现

• gg543012991
• 2016年10月16日 22:57
• 1147

## 【剑指offer】按之字形顺序打印二叉树

• cdwxx1234
• 2017年07月09日 23:34
• 207

## 二叉树------之字形打印二叉树

• hy3686_1991
• 2016年08月08日 18:30
• 272

## 树——按“之”字形打印二叉树（层序遍历变型）

• jingsuwen1
• 2016年05月11日 10:41
• 422

举报原因： 您举报文章：Q61：按之字形顺序打印二叉树 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)