前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >按之字形顺序打印二叉树

按之字形顺序打印二叉树

作者头像
名字是乱打的
发布2022-12-13 13:36:44
2770
发布2022-12-13 13:36:44
举报
文章被收录于专栏:软件工程
代码语言:javascript
复制
 /**
     * 题目描述
     * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
     * 示例1
     * 输入
     * {8,6,10,5,7,9,11}
     * 返回值
     * [[8],[10,6],[5,7,9,11]]
     */
思路:

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

代码语言:javascript
复制
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;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档