剑指Offer-61

题目

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,即第一行按照从左到右的顺序打印,第二层按照从右到左顺序打印,第三行再按照从左到右的顺序打印,其他以此类推。

实现

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();
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/xiaomingdetianxia/article/details/77749097