123 二叉树的序列化于反序列化

问题描述:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个九四u安吉环境,采用相反的重构方式得到原数据,请设计一个算法实现二叉树的序列化于反序列化,这里不限定你的序列/反序列化算法执行逻辑,只需要保证一个二叉树可以被序列为一个字符串并且这个字符串反序列化为原始的树结构。

BFS求解:在序列化的时候,将每个节点放入队列中,如果退出来的元素为空,则在String中放入'#',否则放入该节点的数字。

public String Serialize(TreeNode root)
{
String res="";
Queue<TreeNode>queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty())
{
int queueSize=queue.size();
for(int i=0;i<queueSize;i++)
{
TreeNode TempNode;
queue.add(TempNode.left);
queue.add(TempNode.right);
TempNode=queue.poll();
if(res!=null)
{
if(TempNode==null)
{
String+=','+'#';
}else
{
String+=','+TempNode.val;
}
}else
{
if(TempNode==null)
{
String+='#';
}else
{
String+=TempNode.val;
}
}
}
}
return res;
}public TreeNode deSerialize(String seria)
{
if(seria.equls("#")){return null;}
String data[]=seria.split(',');
Queue<TreeNode>queue=new LinkedList<>();
TreeNode root=new TreeNode();
root.val=data[0];
queue.add(root)
//由于除了顶点所有的节点都是成对出现的,从而根据成对进行判断
for(int i=1;i<data.length;i++)
{
TreeNodem parent=queue.poll();
if(!"#".equals(data[i]))
{
TreeNode left=new TreeNode();
left.val=Integer.parseInt(data[i]);
parent.left=left;
queue.add(left);
}
if(!"#".equals(data[++i]))
{
TreeNode right=new TreeNode();
left.val=Integer.parseInt(data[i]);
​​​​​​​parent.right=right;
queue.add(left);
}
}
return root;
}

DFS求解:通过先序遍历不停的往下走,遇到不是null的情况放入数组中,遇到为null的情况,则放入'#'于数组之中,表示遍历到这里的时候为空。
 

public String serialize(TreeNode root)
{
if(root==null){return "#";}
return root.val+","+serialize(root.left)+","+serialize(root.right);
}
publid TreeNode helper(String[]data,Queue<String>res)
{
String deal=res.poll();
if("#".equals(deal)){return null;}
TreeNode root=new TreeNode();
root.left=helper(data,res);
root.right=helper(data,res);
​​​​​​​return root;
}
public TreeNode deSerialize(String seria)
{
//将结果装在在一个队列中,每遍历一个,就退出一个
Queue<String>queue=new LinkedList<>(Array.asList(seria.split(',')));
return helper(queue);
}

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

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

相关文章

微信这个费用,终于降低了

大家好&#xff0c;我是小悟 这个费用降低了&#xff0c;这对于广大小程序开发者来说无疑是一个好消息。这一举措不仅可以降低开发者的成本&#xff0c;还有助于激发更多的创新和创业激情。 对于广大小程序开发者来说&#xff0c;这也是一个福音&#xff0c;因为他们可以降低开…

DMA技术在STM32中优化UART、SPI和I2C通信性能的研究与实现

DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;技术可以在STM32微控制器上优化UART、SPI和I2C等通信性能。DMA可以实现数据的高速传输&#xff0c;减轻CPU的负担&#xff0c;提高系统性能。在本篇文章中&#xff0c;我将探讨DMA技术在STM32中优化…

【计算机组成原理】

【第一章】计算机系统概述 【第二章】进程管理

RDMA编程实践-SEND-RECEICVE原语应用

RDMA编程实践 本文描述了RDMA编程过程中的SEND-RECEIVE双边原语的代码实现。包含多个版本&#xff0c;1、client向server发送消息&#xff0c;server回复client收到消息(ACK)&#xff0c;然后两边断开连接。2、server端循环等待客户端建立连接&#xff0c;client发送一次消息后…

rocketmq双主双从部署+dashbord

1、主机规划 主机节点地址主机Anamesrv192.168.2.228:9876主机Abroker-a192.168.2.228:10911主机Abroker-b192.168.2.228:11911主机Bnamesrv192.168.2.229:9876主机Bbroker-c192.168.2.229:10911主机Bbroker-d192.168.2.229:11911 2、两台主机都需要执行&#xff0c;创建mq需…

Javaweb之SpringBootWeb案例员工管理之删除员工的详细解析

3.3 删除员工 查询员完成之后&#xff0c;我们继续开发新的功能&#xff1a;删除员工。 3.3.1 需求 当我们勾选列表前面的复选框&#xff0c;然后点击 "批量删除" 按钮&#xff0c;就可以将这一批次的员工信息删除掉了。也可以只勾选一个复选框&#xff0c;仅删除一…

超详细的 pytest 钩子函数 —— 之初始钩子和引导钩子来啦!

前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。 仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现 pyt…

PSP - 提取 UniRef 数据库搜索的 MSA 序列物种 (Species) 信息

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135702185 UniRef库&#xff1a;UniProt参考聚类&#xff08;UniRef&#xff09;的简称&#xff0c;提供了从UniProt知识库&#xff08;包括异构体…

[力扣 Hot100]Day7 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 出处 思路 就是寻找“凹”形区间&#xff0c;找使得左右两端点为最大的两个值的最长区间。这里我分了两种情况&#xff0c;右边大于等于左边…

智慧校园安防系统功能 平安校园、宿舍管理的智慧校园解决方案---豌豆云

从“校园空间”出发&#xff0c;贴合“教学与教务”管理诉求&#xff0c;以“人脸识别”技术作为“身份管理”的立足点&#xff0c;融合“物联网和大数据”多项能力。 打造涵盖“通行考勤、平安校园、宿舍管理、会议签到和人脸支付”在内的智慧校园解决方案&#xff0c;助力校…

MySQL深度分页优化问题

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

C语言基础入门48篇_00_如何学习一门新语言(针对初学者)

程序员之道&#xff0c;万变不离其宗&#xff0c;说相声讲究的是说、学、逗、唱&#xff0c;学习程序最快也是最好的办法就是&#xff1a;过、抄、仿、改、调、看、练、创、悟&#xff1a; 文章目录 1、过&#xff1a;2、抄代码&#xff1a;3、模仿改&#xff1a;4、勤调试&…

RenderDoc 增加 DXBC to HLSL 的 shader viewer

目的 便于后续抓帧出来的 DXBC 转为 HLSL&#xff0c;提高可读性 原因 编写的原因&#xff0c;因为按照网上的大佬的BLOG&#xff0c;发现某个 etnlGD/HLSLDecompiler 上的工具使用上是有问题的 &#xff08;有可能是以前的 render doc 版本没有问题&#xff0c;而我现在是在…

字符串算法总结|双指针的总结

在字符串旋转操作中主要是运用多次反转&#xff0c;最后得到结果。 例如反转字符串里的单词&#xff1a;可以先进行整体反转&#xff0c;最后进行单词反转。 例如从字符串的倒数第k位开始反转&#xff0c;此时可以先整体反转&#xff0c;在局部反转&#xff0c;在反转时可以用…

KubeSphere平台使用

KubeSphere官网地址&#xff1a;https://kubesphere.io/zh/ KubeKey一键部署K8S集群&#xff1a;https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node&#xff08;初始化主节点&#xff09;、两台 work node&#xff08; joi…

SCI好看的配图-汇总

文章目录 图源&#xff1a;Sustainable Cities and Society【期刊】条形图2热力图-地图 图源&#xff1a;Sustainable Cities and Society【期刊】 引自&#xff1a;A machine learning-driven spatio-temporal vulnerability appraisal based on socio-economic data for COV…

如何编写一个好的测试用例?才能防止背黑锅

如何编写一个好的测试用例&#xff1f;才能防止背黑锅 什么是测试用例&#xff1f;一个好的测试用例包含什么&#xff1f;测试用例的编写思路总结 什么是测试用例&#xff1f; 在这之前&#xff0c;思考一个问题&#xff0c;下面这个简单的QQ登录页面&#xff0c;一共又多少条…

关于运维·关于Zabbix监控平台的面试点

目录 引言&#xff1a;明人不说暗话&#xff0c;今天分享几个在面试的时候常被问到关于Zabbix监控平台的面试点 1、zabbix的优点 2、zabbix的缺点 3、zabbix的监控模式 4、zabbix自定义监控怎么做 5、zabbix的自动发现功能 6、zabbix分布式监控有什么特点 引言&#xff1…

代码随想录算法训练营第三十八天| 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

代码随想录算法训练营第三十八天| 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯 题目 509.斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。…

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130&#xff0c;总分380顺利考上哈尔滨工程大学&#xff0c;一年的努力终于换来最后的录取&#xff0c;期中复习有得有失&#xff0c;以下总结一下自己的复习经历&#xff0c;希望对大家有帮助&#xff0c;天道酬勤&#xff0c;加油&#xff01;专业课&…