美文网首页
按之字形顺序打印二叉树

按之字形顺序打印二叉树

作者: 名字是乱打的 | 来源:发表于2022-04-24 21:30 被阅读0次
 /**
     * 题目描述
     * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
     * 示例1
     * 输入
     * {8,6,10,5,7,9,11}
     * 返回值
     * [[8],[10,6],[5,7,9,11]]
     */
思路:

两个栈来实现;
定义一个放奇数层得栈,一个方偶数层得栈,和一个层奇偶标志,
遍历两个栈,每次消灭一个栈中得数据,添加在list中添加一层得数据
需要注意得是结合栈得先进后出性质,当我们遍历到奇数层时候,我们要从左到右得添加数据到栈二.同理偶数相反.

public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> datas = new ArrayList<>();
        if (pRoot == null) {
            return datas;
        }

        //奇数行从左到右,偶数行从右到左
        //奇数栈
        Stack<TreeNode> oddStack = new Stack<>();
        //偶数栈
        Stack<TreeNode> evenStack = new Stack<>();
        oddStack.add(pRoot);

        //当前需要遍历的是奇数栈
        boolean isOdd = true;

        while (!oddStack.isEmpty() || !evenStack.isEmpty()) {
            ArrayList<Integer> item = new ArrayList<>();
            if (isOdd) {
                while (!oddStack.isEmpty()) {
                    final TreeNode poll = oddStack.pop();
                    item.add(poll.val);
                    if (poll.left != null) {
                        evenStack.push(poll.left);
                    }
                    if (poll.right != null) {
                        evenStack.push(poll.right);
                    }
                }
            } else {
                while (!evenStack.isEmpty()) {
                    while (!evenStack.isEmpty()) {
                        final TreeNode poll = evenStack.pop();
                        item.add(poll.val);
                        if (poll.right != null) {
                            oddStack.add(poll.right);
                        }

                        if (poll.left != null) {
                            oddStack.add(poll.left);
                        }
                    }
                }
            }
            isOdd = !isOdd;
            datas.add(item);
        }

        return datas;
    }

相关文章

  • JZ-059-按之字形顺序打印二叉树

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

  • 打印二叉树

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

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

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

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 剑指offer编程题—按之字形打印二叉树

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

  • 面试题32 - III. 从上到下打印二叉树 III

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

  • 面试题32-3.从上到下打印二叉树3_hn

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

  • 剑指offer 33- 之字形打印二叉树

    请实现一个函数按照之字形顺序从上向下打印二叉树。 即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第...

  • Java日记2018-06-04

    32.3 按之字形顺序打印二叉树上一题的扩展,使用辅助的队列 和栈来实现,注意一下注释里面顺序的坑 二叉搜索树的后...

网友评论

      本文标题:按之字形顺序打印二叉树

      本文链接:https://www.haomeiwen.com/subject/mlyqyrtx.html