剑指offer_二叉树---之字形打印二叉树

简介: 剑指offer_二叉树---之字形打印二叉树

题目描述

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

解题思路

1,用两个栈来实现,stack1存放奇数行的,stack2存放偶数行的

2,stack1先push右子节点后push左子节点,stack2反之

3,交替打印和push

代码实现

package 二叉树;
import java.util.ArrayList;
import java.util.Stack;
/**
 * 请实现一个函数按照之字形打印二叉树,
 * 即第一行按照从左到右的顺序打印,
 * 第二行按照从右至左的顺序打印,
 * 第三行按照从左到右的顺序打印,其他行以此类推。
 */
public class PrintBinaryTree {
    public ArrayList<ArrayList<Integer>> IntPrint(TreeNode pRoot) {
    Stack<TreeNode> stack1 = new Stack<TreeNode>();// 存放奇数层的所有元素
    Stack<TreeNode> stack2 = new Stack<TreeNode>();// 存放偶数层的所有元素
    ArrayList<ArrayList<Integer>> listall = new ArrayList<ArrayList<Integer>>(); // 总的集合元素
        stack1.push(pRoot);
        int level = 1; // 从第一层开始
        while (!stack1.isEmpty() || !stack2.isEmpty()) {  //这里是易错点条件一定要加!
            if (level % 2 != 0) { // 如果当前层是奇数层
                ArrayList<Integer> list = new ArrayList<Integer>();
                while (!stack1.isEmpty()) {
                    TreeNode current = stack1.pop();
                    if (current != null) {
                        list.add(current.val);
                        //System.out.print(current.val + " ");
                        if (current.left != null) { //偶数层是先放左节点
                            stack2.push(current.left);
                        }
                        if (current.right != null) {
                            stack2.push(current.right);
                        }
                    }
                }
                if (!list.isEmpty()) {
                    listall.add(list);
                    level++;   //变为偶数层
                    System.out.println();
                }
            } else {
                ArrayList<Integer> list = new ArrayList<Integer>();
                while (!stack2.isEmpty()) {
                    TreeNode current = stack2.pop();
                    if (current != null) {
                        list.add(current.val);
                        System.out.print(current.val + " ");
                        if (current.right != null) {           //奇数层是先放右节点
                            stack1.push(current.right);
                        }
                        if (current.left != null) {
                            stack1.push(current.left);
                        }
                    }
                }
                if (!list.isEmpty()) {
                    listall.add(list);
                    level++;
                    System.out.println();
                }
            }
        }
        return listall;
    }
    public static void main(String[] args) {
    }
}

易错点

当两个栈都为空的时候应该跳出循环不再加入listall

相关文章
|
6月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
511 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
5月前
|
SQL 人工智能 BI
智能体协作革命:基于LangGraph实现复杂任务自动分工
本文探讨大模型应用中多智能体协作的必要性,剖析单智能体局限,并基于LangGraph框架详解多智能体系统构建。通过子图状态共享与Network架构实战,展示如何打造高效、可控的AI协作系统,助力迈向组织级AI。建议收藏,深入学习。
1119 6
|
存储 消息中间件 SQL
Flink 基础学习(五)数据存储
前面两篇笔记已经写了数据来源和转换如何使用,那么这篇当然就到了数据存储,接下来将会从以下角度介绍一下(喜闻乐见的 What / Why / How)~:
1812 0
Flink 基础学习(五)数据存储
|
程序员
阿里技术高P访谈之“呆萌”程序员蒋晓伟为何从Facebook到阿里巴巴
跟蒋晓伟约在一个下午进行访谈,他的花名叫量仔,这个名号让笔者的第一感觉是“高富帅”。然而,当见到本尊之后,才发现他完全就是一个“呆萌”版的程序员,这也印证了其在阿里巴巴内网上的标签——“头像蛮萌的”。
11000 2
|
4月前
|
人工智能 监控 安全
2025年国内主流数据治理与数据中台产品大全,国内数据治理厂商推荐
在数字化转型加速的背景下,数据治理与数据中台成为企业释放数据价值的关键。本文聚焦国内市场,精选10款代表性产品——包括瓴羊Dataphin、腾讯WeData、华为DataArts Studio、字节Dataleap、网易数帆EasyData、奇点云DataSimba、袋鼠云DTinsight、亚信AISWare DataOS、星环TDS和数澜Datahub,从核心能力、架构特点与适用场景等维度进行解析。这些产品各具优势,文章建议企业结合自身规模、业务特性与技术基础,选择匹配的数据平台,以实现数据驱动的高质量发展。
2025年国内主流数据治理与数据中台产品大全,国内数据治理厂商推荐
|
4月前
|
数据采集 JSON BI
京东评论API能挖出多少“神评”?用代码揭秘用户真实反馈
京东商品评论API提供商品全量评论数据,支持按评分、时间筛选及分页获取,返回120+字段与口碑统计,具备高并发、低延迟、数据安全等特性,助力电商分析与决策。
|
5月前
|
人工智能 API 开发工具
AskTable:可嵌入任何系统的 AI 数据智能体引擎
AskTable 是一款以 Table 为核心的数据 AI 基础设施。它通过标准化 API、SDK、iFrame 与智能体协议(MCP),让 AI 能直接理解、查询和分析表格数据,轻松嵌入企业现有系统。 AskTable 提供从数据接入、语义分析到可视化生成的完整能力,可无缝集成至网页、移动端、钉钉、企业微信或 Dify/HiAgent 等智能体平台。
666 157
|
5月前
|
缓存 并行计算 监控
vLLM 性能优化实战:批处理、量化与缓存配置方案
本文深入解析vLLM高性能部署实践,揭秘如何通过continuous batching、PagedAttention与前缀缓存提升吞吐;详解批处理、量化、并发参数调优,助力实现高TPS与低延迟平衡,真正发挥vLLM生产级潜力。
1092 0
vLLM 性能优化实战:批处理、量化与缓存配置方案
|
9月前
|
人工智能 搜索推荐 安全
电商API:数据驱动的营销利器
电商 API 是连接系统与平台的技术桥梁,助力企业实现数据驱动营销。它可实时获取商品、订单及用户行为数据,打破数据孤岛,支持动态化和智能化营销活动。通过整合多渠道数据,企业能优化页面布局、调整广告策略并提升转化率。同时,API 可自动化营销流程,如触发个性化邮件或折扣推送。实际应用中,某时尚电商利用订单 API 提升促销响应率 40%,另一家电品牌借助库存 API 解决超卖问题。未来,AI 融合将推动预测性、计算机视觉和 AR 试穿等智能 API 的发展,隐私计算技术也将保障跨企业数据合作的安全合规。
220 4
|
4月前
|
数据采集 人工智能 JSON
原来用聊天记录就可以创造数字分身!WeClone项目在Lab4AI上的复现
通过WeClone项目,只需导出聊天记录并微调大模型,即可打造专属数字分身。Lab4AI.cn提供一站式服务,无需复杂配置,四步完成:获取数据、预处理、微调、推理。支持自有数据训练,轻松实现个性化AI助手,体验“克隆”自己的奇妙之旅。
349 0