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学习】【面试题61:按之字形顺序打印二叉树】

题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,即第一行按照从左到右的顺序打印,第二层按照从右到左顺序打印,第三行再按照从左到右的顺序打印,...

剑指offer 面试题61 按之字形顺序打印二叉树

剑指offer 面试题61 按之字形顺序打印二叉树题目: 请实现一个函数按照之字型顺序打印二叉树,即第一行按照从左到右的顺序打印, 第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行...

剑指offer面试题61 按之字形顺序打印二叉树(java实现)

解题思路: 利用两个栈stack1和stack2,stack1暂存奇数层的节点,stack2暂存偶数层的节点。当stack1中节点即奇数层节点出栈时,存入一个当前层次的arraylist中,与此同时...

面试题61:按之字形顺序打印二叉树

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路: 这道题看上去像是二叉树的层次遍历,但是又...

《剑指offer》:[61]按之字形顺序打印二叉树

题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三层再按照从左到右打印,其他行以此类推。 例如:按之字形顺序打印二叉树的结果如下图: ...
  • gogoky
  • gogoky
  • 2016年06月30日 10:07
  • 1005

剑指offer-面试题61-按之字形顺序打印二叉树

二叉树节点结构定义: package case62_PrintTreeInZigzag; /** * 定义二叉树节点结构 * * @author WangSai * */ public ...

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

整理自剑指Offer 一:题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 ...

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

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

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

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...

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

题目描述时间限制:1秒 空间限制:32768K请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路【...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q61:按之字形顺序打印二叉树
举报原因:
原因补充:

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