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

之字打印二叉树

作者头像
名字是乱打的
发布2022-05-13 09:21:11
1640
发布2022-05-13 09:21:11
举报
文章被收录于专栏:软件工程

题目描述

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

思路:

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

代码:

代码语言:javascript
复制
  public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> datas=new ArrayList<>();
            if (pRoot==null){
                return datas;
            }
            Stack<TreeNode> stack1=new Stack<>(); //存放奇数层结点
            stack1.push(pRoot);
            Stack<TreeNode> stack2=new Stack<>();//存放偶数层结点
            boolean leftToRight=true;//奇数层--从左到右
            while (!stack1.isEmpty()||!stack2.isEmpty()){  //只要树没有遍历完
                ArrayList<Integer> data=new ArrayList<>();
                if (leftToRight==true){ //如果是奇数层
                    //将结点从左到右加入偶数栈
                    while (!stack1.isEmpty())
                    {
                        TreeNode node = stack1.pop(); //取队栈顶元素
                        if (node.left!=null){
                            stack2.push(node.left);
                        }
                        if (node.right!=null){
                            stack2.push(node.right);
                        }
                        data.add(node.val);
                    }
                    leftToRight = false;
                }else {
                    while (!stack2.isEmpty())
                    {
                        TreeNode node = stack2.pop(); //取队栈顶元素
                        if (node.right!=null){
                            stack1.push(node.right);
                        }
                        if (node.left!=null){
                            stack1.push(node.left);
                        }
                        data.add(node.val);
                    }
                    leftToRight=true;
                }
                datas.add(data);
            }
            return datas;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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