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

原创 2016年08月29日 10:52:48
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) {
                        //temp.add(stack2.peek().leftNode.value);
                        stack1.push(stack2.peek().leftNode);
                    }
                    if (stack2.peek().rightNode != null) {
                        //temp.add(stack2.peek().rightNode.value);
                        stack1.push(stack2.peek().rightNode);
                    }
                    System.out.print(stack2.pop().value+" ");
				}
				System.out.println();
			}
		}
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

按之字形顺序打印二叉树 参与人数:703时间限制:1秒空间限制:32768K通过比例:25.31%最佳记录:0 ms|8552K(  ) 题目描述 请实现一个函数按照之字...
  • u010579068
  • u010579068
  • 2015年11月05日 14:31
  • 1786

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

问题描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:之字形打印其实与上一个按层次打印基本相同...
  • sbq63683210
  • sbq63683210
  • 2016年07月19日 21:23
  • 773

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

一 题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 二 例子 输入二叉树为:8...
  • sniperken
  • sniperken
  • 2016年12月26日 21:02
  • 480

按之字形顺序打印二叉树(java版)

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

按之字形顺序打印二叉树(Java实现)

本题为剑指offer面试题61 牛客网测试地址:https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0 ...
  • zjkC050818
  • zjkC050818
  • 2017年06月12日 10:17
  • 280

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

题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,即第一行按照从左到右的顺序打印,第二层按照从右到左顺序打印,第三行再按照从左到右的顺序打印,...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月13日 08:11
  • 2736

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

题目:按之字型打印二叉树           请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,即第一行按照从左到右的顺序打印,第二层按照从右...
  • gg543012991
  • gg543012991
  • 2016年10月16日 22:57
  • 1147

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

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 分析:做这个题之前首先要会二叉树的层序遍历,相...
  • cdwxx1234
  • cdwxx1234
  • 2017年07月09日 23:34
  • 207

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

题目描述: 实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 分析: 对于一个n层的二叉树,可以使用...
  • hy3686_1991
  • hy3686_1991
  • 2016年08月08日 18:30
  • 272

树——按“之”字形打印二叉树(层序遍历变型)

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路: 用两个stack依次保存相邻的两层...
  • jingsuwen1
  • jingsuwen1
  • 2016年05月11日 10:41
  • 422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q61:按之字形顺序打印二叉树
举报原因:
原因补充:

(最多只允许输入30个字)