美文网首页
剑指offer12

剑指offer12

作者: MonarchNie | 来源:发表于2019-07-08 11:32 被阅读0次

题目描述

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

解题思路分析

如果需要按之字形打印二叉树话,我们其实很快就能想到用两个栈来实现
先将根节点入stack1,然后开始打印过程,当打印的奇数层的时候,将正在被打印的节点左右节点入stack2,这里得捋清楚入栈的时候到底是先入左孩子还是右孩子,从咱们这个题目来看,当再打印stack1中的节点时,由于要求方向输出,所有在将正在打印的节点的左孩子先入栈,然后再入它的右孩子,相反的,如果是在打印stack2中的节点时,应该先将正在打印的节点的右孩子先入栈,然后再入它的左孩子,还有我们需要一个标识来记录我们正在打印的是奇数层还是偶数层,这样分析下来,代码就好写了

代码实现

public ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
    if(pRoot == null) {
        return null;
    }
    ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
    //声明两个栈来存储节点
    Stack<TreeNode> stack1 = new Stack<>();
    Stack<TreeNode> stack2 = new Stack<>();
    stack1.push(pRoot);
    int layer = 1;
    while (!stack1.isEmpty() || !stack2.isEmpty()) {
        if ((layer & 1) == 1) {
            ArrayList<Integer> list = new ArrayList<>();
            while (!stack1.isEmpty()) {
                TreeNode node = stack1.pop();
                if (node != null) {
                    s2.push(node.left);
                    s2.push(node.right);
                    list.add(node.val);
                }
            }
            if (!list.isEmpty()) {
                lists.add(list);
                layer++;
            }
        }else {
            ArrayList<Integer> list = new ArrayList<>();
            while (!stack2.isEmpty()) {
                TreeNode node = stack2.pop();
                if (node != null) {
                    s1.push(node.right);
                    s1.push(node.left);
                    list.add(node.val);
                }
            }
            if (!list.isEmpty()) {
                lists.add(list);
                layer++;
            }
        }
    }
    return lists;
}

相关文章

  • 剑指offer12

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

  • 剑指

    遥望中原九点烟,风云直上七重天。 今朝再向江湖去,一剑流星谁比肩? 2011.10(1488)

  • 剑指

    1. 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • 剑指offer

    第一题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,...

  • 剑指BAT

    Android工作5年半了,一毕业就开始做这行。在现在这家公司工作了3年整,最近有换工作的打算,所以在猎聘...

  • 《剑指offer》

    4.调整数组顺序使奇数位于偶数前面 题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇...

  • 气剑指

    “聚气于指尖,凝其成剑,利可断金。”牢头对身边的狱卒说。 只见牢头举起的右手指尖逐渐变红,转而变白,隐隐发出音量很...

  • 剑指offer

    二维数组中查找数在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到...

  • 剑指苍穹

    逆天命,斩苍穹,吾乃修士,率性而为!《剑指苍穹》是一款逍遥仙侠MMORPG——群魔阻道,斩群魔;妖邪拦路,诛妖邪,...

网友评论

      本文标题:剑指offer12

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