美文网首页
面试题32_III_按之字形顺序打印二叉树

面试题32_III_按之字形顺序打印二叉树

作者: shenghaishxt | 来源:发表于2020-02-13 21:35 被阅读0次

题目描述

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

题解

用两个栈实现,一个栈stackToRight用于保存需要从左往右打印的节点,另一个栈stackToLeft用于保存下一层需要从右往左打印的节点。

由题意,第一行按照从左到右的顺序打印,因此把根节点加入stackToRight中。然后循环开始,当stackToRight不为空时,则把其下一层的节点添加到stackToLeft中(注意左右子节点添加的顺序);当stackToLeft不为空时,则把其下一层的节点添加到stackToRight中(注意左右子节点添加的顺序)。与此同时,使用list记录打印的节点。当两个栈都为空时循环结束。

public ArrayList<ArrayList<Integer>> Print(TreeNode root) {
    ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    Stack<TreeNode> stackToRight = new Stack<>();
    Stack<TreeNode> stackToLeft = new Stack<>();
    if (root == null)
        return res;

    stackToRight.push(root);
    while (!stackToRight.isEmpty() || !stackToLeft.isEmpty()) {
        if (!stackToRight.isEmpty()) {
            ArrayList<Integer> list = new ArrayList<>();
            while (!stackToRight.isEmpty()){
                TreeNode p = stackToRight.pop();
                list.add(p.val);
                if (p.left != null)
                    stackToLeft.push(p.left);
                if (p.right != null)
                    stackToLeft.push(p.right);
            }
            res.add(list);
        }
        if (!stackToLeft.isEmpty()) {
            ArrayList<Integer> list = new ArrayList<>();
            while (!stackToLeft.isEmpty()){
                TreeNode p = stackToLeft.pop();
                list.add(p.val);
                if (p.right != null)
                    stackToRight.push(p.right);
                if (p.left != null)
                    stackToRight.push(p.left);
            }
            res.add(list);
        }
    }
    return res;
}

相关文章

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

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

  • 打印二叉树

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

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

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

  • 面试题32_III_按之字形顺序打印二叉树

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

  • 二叉树的遍历

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

  • 剑指第三周

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

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

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

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

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

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

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

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

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

网友评论

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

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