33_3 之字形打印二叉树

二叉树层次遍历算法
本文介绍了一种使用双栈实现的二叉树层次遍历算法,通过交替使用两个栈来实现从左到右和从右到左的层次遍历,展示了如何构造二叉树并打印其层次结构。

package sort;

import java.util.Stack;

public class Test32_3 {

    public static void main(String[] args) {
        int deepth = 3;
        // int rootvalue=1;
        BinayTreeNode root = new BinayTreeNode(1, null, null);
        makeTree(root, deepth);

        printTree(root);

    }

    private static void printTree(BinayTreeNode root) {// 需要两个栈
        // TODO Auto-generated method stub
        Stack<BinayTreeNode> stack1 = new Stack<BinayTreeNode>();
        Stack<BinayTreeNode> stack2 = new Stack<BinayTreeNode>();
        stack1.push(root);// 首先将元素放入其中一个栈中

        while (!stack1.isEmpty() || !stack2.isEmpty()) { // 如果两个栈中某个栈还有元素就继续
            if (!stack1.isEmpty() && stack2.isEmpty()) {// 栈1不空,去栈顶元素,输出节点值,然后把根节点的左节点和右节点分别放入栈2
                                                        // 中
                while (!stack1.isEmpty()) {// 注意放先放左节点再放右节点
                    BinayTreeNode temp = stack1.pop();
                    System.out.println(temp.value + " ");
                    if (temp.left != null)
                        stack2.push(temp.left);
                    if (temp.right != null)
                        stack2.push(temp.right);

                }

            }

            if (!stack2.isEmpty() && stack1.isEmpty()) {// 栈2不空,去栈顶元素,输出节点值,然后把根节点的右节点和左节点分别放入栈2
                                                        // 中

                while (!stack2.isEmpty()) {// 注意放先放右节点再放左节点
                    BinayTreeNode temp = stack2.pop();
                    System.out.println(temp.value + " ");
                    if (temp.right != null)
                        stack1.push(temp.right);
                    if (temp.left != null)
                        stack1.push(temp.left);
                }

            }

        }

    }

    private static void makeTree(BinayTreeNode node, int deep) {
        // TODO Auto-generated method stub
        if (deep > 0) {
            node.left = new BinayTreeNode(node.value * 2, null, null);
            node.right = new BinayTreeNode(node.value * 2 + 1, null, null);
            makeTree(node.left, deep - 1);
            makeTree(node.right, deep - 1);
        }

    }
}
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值