(补)算法刷题Day16:BM39 序列化二叉树

ops/2024/12/14 23:09:57/

题目链接

描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:

自行序列化和反序列化。元素用逗号分隔。
序列化: 使用队列+层序遍历。遍历每一层节点,并访问其左右孩子,如果是空则序列化成#,如果是数字,则序列化成str。
反序列化: 使用队列+两两遍历字符串,按层次构造二叉树。具体做法是:先将根节点入队。然后遍历队列,每取出一个节点,就取两个字符,作为其左右孩子。如果字符为#,说明孩子为空,如果字符为数字,说明孩子不为空,并将其压进队列。(讲的有点难懂。。)

python">import queue
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def Serialize(self, root):# write code hereresult = ""if root is None:return resultq = queue.Queue()q.put(root)result += str(root.val) + ","while not q.empty():node = q.get()if node.left:q.put(node.left)result += str(node.left.val) + ","else:result += "#,"if node.right:q.put(node.right)result += str(node.right.val) + ","else:result += "#,"return resultdef Deserialize(self, s):if s == "":return Nones = s.split(",")# 数字压进队列,get一个数字就赋值左右孩子q = queue.Queue()root = TreeNode(int(s[0]))q.put(root)cur = 1while not q.empty() and cur < len(s):node = q.get()# 处理左节点val = s[cur]print(val, cur)if val == "#":node.left = Noneelse:new_node = TreeNode(int(val))node.left = new_nodeq.put(new_node)cur += 1# 处理右节点val = s[cur]if val == "#":node.right = Noneelse:new_node = TreeNode(int(val))node.right = new_nodeq.put(new_node)cur += 1return root

来还债了


http://www.ppmy.cn/ops/141935.html

相关文章

微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列

参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子&#xff0c;但并不完整&#xff0c;根据上述代码&#xff0c;进行修改完善&#xff0c;实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…

POE网络变压器和常规网络变压器的区别

POE网络变压器是一种特殊类型的网络变压器&#xff0c;它不仅具备传统网络变压器的功能&#xff0c;如电气隔离、阻抗匹配和信号耦合&#xff0c;还为以太网供电&#xff08;Power Over Ethernet&#xff0c;简称POE&#xff09;提供支持。具体来说&#xff0c;POE网络变压器能…

前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换

目录 示例&#xff1a; 准备&#xff1a; ?编辑 开始&#xff1a; 1、新建页面&#xff0c;在script标签中引入百度地图的api数据&#xff0c;把自己在控制台创建的应用的ak替换上去 2、创建一个dom对象&#xff0c;设置宽高 3、在js中初始化地图 进阶&#xff1a; 1…

ARMS,让企业应用性能问题无处藏身

在科技驱动的时代&#xff0c;企业对应用程序的依赖越来越深&#xff0c;但复杂的系统架构和高并发的使用场景也让应用的性能维护成为巨大的挑战。当用户体验成为企业竞争的核心&#xff0c;如何快速发现问题、优化性能&#xff0c;成为每一个技术团队必须解决的难题。应用实时…

HCIE实验OBS区

1、OBS区分为OBS-LVS和OBS-Node。 OBS-LVS主要是管理和业务。

嵌入式Linux 设备树 GPIO详解 示例分析 三星 NXP RK

GPIO设备树用于在Linux内核中定义与GPIO相关的硬件资源&#xff0c;它使操作系统可以识别、配置和使用GPIO引脚。设备树中通常会指定GPIO控制器的基地址、GPIO引脚的中断配置、时钟和其他相关信息。 目录 RK相关案例代码 NXP相关案例代码 三星相关案例代码 在设备树中&…

【docker】12. Docker Volume(存储卷)

什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主机上…

初识Linux · 网络基础

目录 前言&#xff1a; 初识协议 再识协议 局域网 跨网络传输 前言&#xff1a; 本文作为Linux网络学习的第一篇文章&#xff0c;相对来说概念还是偏多的&#xff0c;甚至于概念让人觉得晦涩&#xff0c;这是非常正常的&#xff0c;那么进入网络部分之前&#xff0c;我们…