ZigZag打印二叉树

二叉树的按层打印与 ZigZag 打印 二叉树的按层打印与 ZigZag 打印 题目 给定一棵二叉树,实现按层打印和ZigZag打印。 按层打印: Level 0: 6 Level 1: 5, 7 Level 2: 2, 5, 8 ZigZag打印: Level 0: 6 Level 1: 7, 5 Level 2: 2, 5, 8 按层打印 思路1 使用队列,把节点所在层一起存进去,记录当前层,若跟出队节点层数不同,则当前层数加1 ... 阅读详情

问题:

给定二叉树,ZigZag打印每一层的节点,如果上一层是从左到右,下一层就是从右到左。


分析:

本题和分层打印二叉树是一样的,我们只需要判断上一层的顺序,就可以判断该层的顺序。


代码:

public static void printZigZag(Node node) {
	ArrayList<Node> list1 = new ArrayList<Node>();
	ArrayList<Node> list2 = new ArrayList<Node>();
	
	boolean rightToLeft = false;
	list1.add(node);
	
	while(list1.size() != 0) {	
		if (rightToLeft == true) {
			for (int i = list1.size() - 1; i >= 0 ; i--) {
				System.out.print(list1.get(i).value + " ");
			}
			rightToLeft = false;
		} else {
			for (int i = 0; i < list1.size(); i++) {
				System.out.print(list1.get(i).value + " ");
			}
			rightToLeft = true;
		}
		
		for (int i = 0; i < list1.size(); i++) {
			if (list1.get(i).leftChild != null) list2.add(list1.get(i).leftChild);
			if (list1.get(i).rightChild != null) list2.add(list1.get(i).rightChild);
		} 
		System.out.println();
		list1.clear();
		
		ArrayList<Node> temp = list1;
		list1 = list2;
		list2 = temp;
	}
}
class Node {
    Node leftChild = null;
    Node rightChild = null;
    String name;

    Node(String name) {
        this.name = name;
    }
}
转载请注明出处: http://blog.youkuaiyun.com/beiyetengqing/


Zigzag打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路:在原来的广搜基础上,按照每层的节点数量(即q.size())进行分组操作,一批一批来。 /* struct TreeNode { int val; struct TreeNode *left; struct... 阅读详情

相关推荐

OpenClaw Docker 安装问题解决全记录

控制面板无法加载(WebSocket 错误) | 确认 Nginx 配置中的 `Upgrade` 和 `Connection` 头正确 || 网关容器无法启动 | `docker compose logs openclaw-gateway`,检查权限、镜像名 |如需消除,使用 Let's Encrypt |- `<your-token>`:你的 OpenClaw 网关令牌(如 `b0e5ab...`)将 `<nas-ip>` 替换为你的群晖内网 IP(例如 `192.168.1.100`)。

u014490376的博客 2309

二叉树 按层打印和按zigzag 模式打印

zigzag 打印没法使用之前的办法,我是用两个linkedList 实现,一个负责保存奇数行的数据,一个保存偶数行数据,还需要一个变量来控制当前是从奇数list 取值还是偶数list取值,在第一次从list 取值的时候需要判断是否是第一次取,如果是第一次需要打印换行,从奇数行取了需要放入偶数行,取值子节点的时候一定要先取右子树然后再取左子树,这样能保证一行的数据是按照从左往右或者从右往左的顺序排列,如果先取左节点就会打乱这个顺序。考验如果按照规则遍历二叉树,接下来看zigzag 打印。

weixin_42531583的博客 399

VMD分子可视化实战:5个隐藏技巧让你的科研图像秒变顶刊级别

本文深入探讨了VMD分子可视化软件在科研图像美化中的5个高阶技巧,旨在帮助研究者将分子结构图提升至顶刊级别。内容涵盖原子色彩与材质的艺术化定制、沉浸式分子环境构建、专业构图与视角控制、数据驱动的动态可视化以及自动化工作流建立,通过精细的色彩映射、光照调整、周期性边界展示和脚本自动化,显著增强图像的科学叙事性与视觉冲击力。

weixin_29240343的博客 421

Leetcode 二叉树的锯齿形层序遍历

定义了一个。

985小菜鸡 1115

【Godot】实现对话系统

在 Godot 中实现对话系统(Dialogue System)是游戏开发中的常见需求。Godot本身自带的的灵活性和轻量级脚本语言 GDScript 使得实现对话系统变得相对简单。以下是实现一个基础对话系统的示例。(语言为GDScript但高亮选择Python因为类似)通过 Godot 和 GDScript,我们可以给我们的游戏实现一个对话系统。从简单的文本显示到复杂的分支对话,Godot 提供了足够的灵活性来满足我们的需求。如果需要更高级的功能,可以尝试使用现成的插件如 Dialogic。

Octopus2077的博客 2523

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

二叉树S型遍历算法

算法需求 如下图所示,按照图中的箭头顺序遍历节点 算法分析 图中每一层节点的迭代顺序都会改变,使用传统的单个队列或单个栈都难以实现,所以我们考虑使用两个栈空间来分别存储正向和逆向的节点,以达到按层换顺的目的 我们以第一、二行和第三行为例,初始化时将root节点1压入右栈 1、遍历右栈节点1时,按顺序将左子节点3和右子节点2压入左栈(图一) 2、对左栈进行出栈操作。取出节点2,将右子节点6压入右栈...

flyfhj的博客 4229

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3697

(二十七)二叉树的ZigZag打印

二叉树的ZigZag打印 解题思路:(双端队列) 首先生成一个双端队列dq。把头部放入dq; 原则一:如果从左往右打印,那么一律从dq的头部弹出节点,如果弹出的节点有子节点,先让左孩子从尾部进入dq,再让右孩子从尾部进入dq;如果弹出的节点没有子节点,则不需要放dq中。 原则二:如果从右往左打印,那么一律从dq的尾部弹出节点,如果弹出的节点有子节点,先让右孩子从头部进入dq,再让左孩子从头部进入dq;如果弹出的节点没有子节点,则不需要放dq中。 确定切换原则一与原则二的时机:下一层中最后打印的节点是当前

蹦跶跶 761

RK3568平台(内存篇)DDR定频修改

如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。

weixin_49303682的博客 1623

Vision 机器视觉案例 之 零件边缘缺陷检测

缺陷检测工具

机器视觉李小白的博客 1387

【理解二叉树】非递归,中序遍历/先序遍历/后续遍历/层次遍历/S型打印

【递归】先序,中序,后序遍历。

weixin_52958292的博客 271

具身智能 | 从具身智能出发谈多传感器融合技术

多传感器融合感知是具身智能系统突破“感知—认知—行动”闭环的核心使能技术。本文从具身智能的视角出发,对多传感器融合技术进行系统综述。首先阐述了具身智能对多传感器融合提出的独特需求,包括异构感知集成、跨模态语义对齐和实时闭环决策。其次,构建了多层级融合技术分类框架,从数据层融合、特征层融合、决策层融合、时序融合到多模态大语言模型(MLLM)融合,逐层梳理主流方法与演进脉络。在此基础上,分析了面向具身智能的通用融合架构设计,涵盖了感知—推理—执行三层架构及其关键组件。

尘世冰封的专栏 312

左神算法:二叉树的按层打印与ZigZag打印(Java版)

本题来自左神《程序员代码面试指南》“二叉树的按层打印与ZigZag打印”题目。 题目 给定一棵二叉树的头节点 head,分别实现 按层 和 ZigZag 打印 二叉树的函数。 例如,二叉树如图 3-29 所示。 按层打印时,输出格式必须如下: Level 1 : 1 Level 2 : 2 3 Level 3 : 4 5 6 Level 4 : 7 8 ZigZag 打印时,输出格式必须如下: Level 1 from left to right: 1 Level 2 from right to l.

寒泉 6万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

二叉树的按层打印与ZigZag打印

二叉树的按层打印与ZigZag打印 题目描述: 给定一颗二叉树,分别实现按层和 ZigZag 打印二叉树。 ZigZag遍历: 意思是第一层从左到右遍历,第二层从右到左遍历,依次类推。 输入描述: 第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。 以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理) 输出描述: 先输出按层打印,再输出按ZigZag打印。

MIC10086的博客 339

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

二叉树的按层打印和ZigZag打印

题目:给定一个二叉树的头节点head, 分别实现按层和ZigZag打印二叉树的函数 class Node: def __init__(self,value): self.value = value self.left = None self.right = None def printByLevel(head): if hea...

BUPT-WT的博客 262

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

二叉树问题---二叉树的按层打印和ZigZag打印

#按层打印 def printByLevel(root): if not root: return print("Print binary tree by level") queue = [] queue.append(root) last = root level = 1 print("Level " + str(level)

冰殇的博客 760

【中等】二叉树的ZigZag打印-Java

package live.every.day.ProgrammingDesign.CodingInterviewGuide.BinaryTree; import java.util.Deque; import java.util.LinkedList; /** * 二叉树的ZigZag打印 * * 【题目】 * 给定一棵二叉树的根节点root,实现ZigZag打印二叉树的函数。 * 例如: * 5 * / \ * 2 8 * / \ /

了解➔熟悉➔掌握➔精通 895

程序员代码面试指南第二版 40.二叉树的按层打印与ZigZag打印

welcome to my blog 程序员代码面试指南第二版 40.二叉树的按层打印与ZigZag打印 题目描述; 核心:记录层数, 可以使用countdown, num, level三个变量共同控制, 其中,countdown表示当前层还有多少节点没处理, 从第一层开始记录, 第一层还剩1个根节点没有处理; num记录下一层节点的数量, 从第二层开始记录, 第二层就是根节点的下一层; leve...

littlehaes的博客 390

程序员代码面试指南刷题--第三章.二叉树的按层打印与ZigZag打印

题目描述 给定一颗二叉树,分别实现按层和 ZigZag 打印二叉树。 ZigZag遍历: 意思是第一层从左到右遍历,第二层从右到左遍历,依次类推。 输入描述: 第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。 以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左...

我不是什么好人 296

CD 168 二叉树的按层打印与ZIgZag打印

题目描述 给定一颗二叉树,分别实现按层和 ZigZag 打印二叉树。 ZigZag遍历: 意思是第一层从左到右遍历,第二层从右到左遍历,依次类推。 输入描述: 第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。 以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理) 输出描述: 先输出按层打印,再输出按ZigZag打印。 示例1 输入 复制 8 1 1 2

xunzhaofupo的博客 267

Binary Tree Zigzag Level Order Traversal 二叉树ZigZag打印

Binary Tree Zigzag Level Order Traversal  My Submissions Question Editorial Solution Total Accepted: 61552 Total Submissions: 213085 Difficulty: Medium Given a binary tree, re

程序緣的专栏 609

二叉树的按层打印输出、ZigZag打印输出

1.二叉树的节点结构 //二叉树节点结构 public class TreeNode&lt;T&gt; { T data; TreeNode left; TreeNode right; public TreeNode(T data){ this.data = data; this.left = null; this...

lanchunqiu的专栏 418

把二叉树打印成多行 按之字形顺序打印二叉树 binary tree zigzag level order traversal

把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tree

DuanLiuchang的博客 1170
上一篇: 短址(short URL)原理及其实现
下一篇: 确保对象的唯一性——单例模式
beiyetengqing
博客等级 码龄14年 148粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值