LC.297 | 二叉树的序列化与反序列化 | 树 | 定长编码传递信息

输入:二叉树的根节点root

要求:设计一个算法,将二叉树序列化为一个字符串,并且可以将该字符串反序列化为原始的树结构。不限制具体的序列化逻辑(如前序、层序等),只要保证“编码 -> 解码”过程可逆且准确即可。

输出:

  • serialize: 返回编码后的string
  • deserialize: 返回还原后的TreeNode*

本题很有意思,序列化与反序列化,然后全程只有一个字符串传递,之前我们已经做到简单版的问题,这一题一部分难点在于如何用string传递足够多的信息,颇有点计算机的本质了,就是信息的传递。
采用了一种自定义的“定长编码协议”结合 BFS 来实现,避免了复杂的字符串分割操作。

  1. 序列化 (Serialize) - 定长编码规则:

    • 使用层序遍历 (BFS)
    • 不使用分隔符(如逗号),而是将每个节点的信息固定编码为7个字符的字符串片段。
    • 格式定义[符号位 1位][数值位 4位][左孩子存在标志 1位][右孩子存在标志 1位]
      • 第1位:符号。0表示正数,1表示负数。
      • 第2-5位:数值的绝对值,不足4位前面补0(已知数值范围在 -1000 到 1000 之间)。
      • 第6位:左孩子标记。1表示有左孩子,0表示无。
      • 第7位:右孩子标记。1表示有右孩子,0表示无。
    • 遍历过程中,如果孩子存在,将其入队,并在当前节点的字符串中标记为1;否则标记0且不记录空节点的数据。
  2. 反序列化 (Deserialize) - 双指针索引法:

    • 同样利用队列进行 BFS 重建。
    • 维护两个索引(模拟指针):
      • Idx:指向当前正在处理的父节点在字符串中的位置索引(第几个节点)。
      • Cur:指向字符串中下一个待分配的数据块的位置索引。
    • 流程
      1. 先解析前7个字符构建根节点,入队。
      2. 当队列不为空时,取出队头节点(对应Idx指向的数据块)。
      3. 读取Idx数据块的第6位和第7位(左右孩子标记)。
      4. 如果标记为1,则从Cur指向的位置读取7个字符,构建子节点,连接到父节点,子节点入队,并让Cur加 1。
      5. 处理完当前节点后,Idx加 1。

复杂度:

  • 时间复杂度:O(N)
    • 序列化和反序列化都需要遍历树中所有的节点一次。
  • 空间复杂度:O(N)
    • 需要使用队列进行层序遍历,队列最大长度为树的一层节点数。同时需要存储序列化后的字符串,长度与节点数成正比。

classCodec{public:// Encodes a tree to a single string.stringserialize(TreeNode*root){if(!root)return"";queue<TreeNode*>q;string ser="";q.push(root);while(!q.empty()){intn=q.size();for(inti=0;i<n;i++){TreeNode*t=q.front();q.pop();if(t->val>=0){ser+="0";}else{ser+="1";}string valStr=to_string(abs(t->val));while(valStr.length()<4){valStr="0"+valStr;}ser+=valStr;if(t->left!=nullptr){ser+="1";q.push(t->left);}else{ser+="0";}if(t->right!=nullptr){ser+="1";q.push(t->right);}else{ser+="0";}}}returnser;}TreeNode*deserialize(string data){if(data==""){returnnullptr;}introotVal=(data[1]-'0')*1000+(data[2]-'0')*100+(data[3]-'0')*10+(data[4]-'0');if(data[0]=='1'){rootVal=-rootVal;}TreeNode*root=newTreeNode(rootVal);queue<TreeNode*>q;q.push(root);intCur=1;intIdx=0;while(!q.empty()){intn=q.size();for(inti=0;i<n;i++){TreeNode*t=q.front();q.pop();if(data[Idx*7+5]=='1'){intleftVal=(data[Cur*7+1]-'0')*1000+(data[Cur*7+2]-'0')*100+(data[Cur*7+3]-'0')*10+(data[Cur*7+4]-'0');if(data[Cur*7]=='1'){leftVal=-leftVal;}TreeNode*tmp=newTreeNode(leftVal);t->left=tmp;q.push(tmp);Cur++;}if(data[Idx*7+6]=='1'){intrightVal=(data[Cur*7+1]-'0')*1000+(data[Cur*7+2]-'0')*100+(data[Cur*7+3]-'0')*10+(data[Cur*7+4]-'0');if(data[Cur*7]=='1'){rightVal=-rightVal;}TreeNode*tmp=newTreeNode(rightVal);t->right=tmp;q.push(tmp);Cur++;}Idx++;}}returnroot;}};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1018888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕设开源 深度学习语义分割实现弹幕防遮(源码分享)

文章目录0 简介1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法3 实例分割4 实现效果最后0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 深度学习语义分割实现弹幕防遮(源码分享) &#x1f9ff; 项目分享:见文末! 1 课题背景 弹幕是显示在视频上的评论&a…

44、TCP状态处理与Netlink套接字详解

TCP状态处理与Netlink套接字详解 1. TCP状态处理 在TCP通信中,状态处理是确保数据可靠传输的关键。当考虑是否能从恢复状态撤销时,下一步就是退出恢复状态。 1.1 退出恢复状态 Reno实现 :要退出恢复状态,需要对超过 tp → high_seq 的内容进行确认(ACK)。这样做是…

【Java毕设全套源码+文档】基于springboot的高校失物招领平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

AI大模型入门到精通:制造业应用实践,一篇搞定,建议收藏!

本文全面解析了AI大模型在制造业的应用&#xff0c;介绍了大模型的基本概念、核心赋能方式&#xff08;直接赋能、场景化定制、任务化定制&#xff09;和产品形态。文章分析了大模型的适用边界与核心能力&#xff0c;以及语言、专用、多模态和视觉四类模型在工业各环节的应用案…

毕设项目 yolo葡萄采摘护理定位辅助系统(源码+论文)

文章目录0 前言1 项目运行效果2 课题背景2.1. 葡萄种植产业现状2.2. 农业智能化转型需求2.3. 计算机视觉技术优势2.3.1 技术层面2.3.2 应用层面2.4. 项目创新价值2.5. 技术发展趋势3 设计框架3.1. 系统概述3.2. 技术架构3.2.1 整体架构3.2.2 核心技术栈3.3. 系统模块详解3.3.1 …

你的 QQ 藏着多少 “隐形价值”?这款评估工具太会玩了!

你的QQ藏着多少“隐形价值”&#xff1f;这款评估工具太会玩了&#xff01; 作为陪伴无数人成长的社交账号&#xff0c;QQ早已不只是聊天工具&#xff0c;更承载着青春回忆与数字资产属性。你是否好奇过自己用了多年的QQ号到底值多少钱&#xff1f;今天就给大家推荐一款超有趣…

62、lkcd与TCP/IP栈调试全解析

lkcd与TCP/IP栈调试全解析 1. lkcd源与补丁 lkcd源可从sourceforge.net获取。kerntypes是内核数据结构的数据库,在构建lkcd时生成。它和系统映射文件作为lcrash的参数。以下是启动lcrash程序的命令: - 在内核崩溃转储上启动: lcrash kerntypes core - file system.map在…

毕设项目 深度学习YOLOv5车辆颜色识别检测

文章目录1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练1 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长…

UE5 材质-38-节点:

&#xff08;161&#xff09; &#xff08;162&#xff09; &#xff08;163&#xff09; 谢谢

【Java毕设全套源码+文档】基于springboot的研究生志愿填报辅助系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

客户一聊就放松!3句“舒服话术”让成交水到渠成

销售工作的核心并非是去说服客户购买产品&#xff0c;而是要和客户建立起互相信任的关系&#xff1b;和客户聊天的目的也不是单纯地推销产品&#xff0c;而是要让客户愿意听你讲话&#xff0c;那些真正在情商方面表现出众的销售人员&#xff0c;懂得运用“让人感觉舒适的话术”…

国内优质酒店设计施工一体化公司推荐 - 品牌排行榜

国内优质酒店设计施工一体化公司推荐酒店设计施工一体化是将设计方案与施工执行统筹整合的服务模式,通过全流程协同提升项目效率、保障工程质量,同时实现责任主体统一,为业主减少沟通成本与风险。这种模式在酒店建设…

56、IP 过滤与防火墙技术解析

IP 过滤与防火墙技术解析 1. IP 过滤基础 在网络通信中,IP 过滤和防火墙起着至关重要的作用。TRACK 和 NF_IP_PRI_NAT_DST 可以针对相同的钩子编号和协议族进行注册,这意味着它们能够依据优先级存在于同一链中。其中,优先级为 NF_IP_PRI_CONNTRACK 的钩子会首先被处理,因…

好写作AI:别卷了,这算法能一键生成你憋了仨月的论文

深夜的实验室里&#xff0c;对着空白文档发呆的研究生小林&#xff0c;突然收到了一条AI生成的论文大纲。第二天&#xff0c;导师看着那份结构清晰、重点突出的初稿&#xff0c;破天荒地回复了三个字&#xff1a;“有点东西。” 这并非科幻场景。南京财经大学一项调研显示&…

好写作AI:给你的键盘装上“三头六臂”

当你还在为改稿发愁&#xff0c;在“学术严谨”和“语言风趣”之间反复横跳时&#xff0c;好写作AI已经用一套算法&#xff0c;让文本生成、润色和风格迁移这三件苦差事&#xff0c;像流水线一样丝滑地同时运转起来了。 对许多创作者来说&#xff0c;写作是一个线性过程&#x…

鸿蒙 Electron 进阶实战:分布式数据同步与多设备协同开发指南

在上一篇文章中&#xff0c;我们实现了鸿蒙与 Electron 的基础通信及原生能力调用&#xff0c;验证了两者融合的可行性。但在企业级全场景应用中&#xff0c;更核心的需求是分布式数据同步&#xff08;如多端任务列表实时同步&#xff09;和多设备协同&#xff08;如 Electron …

【2025权威发布】高精度|高性能|进口光互联纳米制造设备解决方案,头部品牌企业推荐TOP3 - 品牌推荐大师1

光互联纳米制造设备,指的是用于制造和加工微米到纳米尺度光互连结构的专用设备和系统。简单来说,就是为了在芯片或光模块内部“搭建”极细微的“光路通道”,实现光信号高速传输所必需的精密加工工具。 为了让你快速…

好写作AI:别让你的论文逻辑再“左右横跳”了!

面对一篇由AI生成的、论点四处“闪现”、上下文关系比网红情侣还脆弱的文章&#xff0c;你是否也感到CPU都快烧了&#xff1f;逻辑连贯性&#xff0c;这个长期困扰AI写作的“阿喀琉斯之踵”&#xff0c;如今有了新的解法。 深夜&#xff0c;研究生小陈看着屏幕上一段AI生成的技…

鸿蒙 Electron 实战:集成鸿蒙推送服务与 Electron 应用消息通知全方案

在鸿蒙与 Electron 的融合开发中&#xff0c;跨端消息推送是企业级应用的核心需求之一。鸿蒙推送服务&#xff08;Push Kit&#xff09;能实现鸿蒙设备的高效消息触达&#xff0c;而将其与 Electron 桌面应用结合&#xff0c;可打造 “鸿蒙设备触发、Electron 端接收响应” 的全…

好写作AI:给你的键盘装个“副驾”,这波Transformer交互设计赢麻了!

深夜&#xff0c;你的手指悬在键盘上&#xff0c;对着空白文档第18次删掉刚写下的开头——这场景&#xff0c;像极了等待加载的进度条&#xff0c;卡在99%就是不动。直到光标旁&#xff0c;悄然浮现出第一行由AI写下的、与你心意相通的句子。 这不是魔法&#xff0c;而是好写作…