剑指Offer的学习笔记(C#篇)-- 序列化二叉树
2024-09-07 20:51:51
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
一 . 理解题意
二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的转换。将二叉树中的没个结点的空指针引出一个虚节点,其值为一个特定值,比如说 # 字符,我们成这种处理后的二叉树为原来二叉树的扩展二叉树。扩展二叉树和二叉树是一一对应关系。所以下图的前序的序列化序列为:A B # D # # C # #。
二 . 代码实现与分析
class Solution
{
public string Serialize(TreeNode root)
{
string result = "";
//递归结束条件
if (root == null)
{
result += "#,";
//最终输出
return result;
}
//序列化加数
result += root.val + ",";
//递归左子节点
result += Serialize(root.left);
//递归右子节点
result += Serialize(root.right);
//输出(非最终)
return result;
}
//把它放在外面是有用意的,因为里面为了构造一个连加,这个是为了搞第一个数。
private int index = -;
public TreeNode Deserialize(string str)
{
index += ;
TreeNode tmp= null;
//去掉,
string[] strList = str.Split(',');
//子节点结束条件
if (strList[index] != "#")
{
//把这个序列化里面的数一个个揪出来
tmp = new TreeNode(int.Parse(strList[index]));
//左子节点遍历
tmp.left = Deserialize(str);
//右子节点遍历
tmp.right = Deserialize(str);
}
//反序列化输出
return tmp;
}
}
又涉及到双递归了,双递归就要涉及到栈的知识,个人感觉很麻烦,不过递归记住两个点就好了。点1:递归停止条件。点二:递归内容。
其实最近的笔记一直是手写的,没有用画图工具精心去做,一来呢,手写更可以好好的思考,二就是比较快嘛,啊哈哈哈哈...........
最新文章
- 剑指offer五:
- bootstrap垂直下拉菜单默认展开
- sql server还原数据库文件(.bak)常见问题解决办法笔记
- jdk、apache-ant结合yuicompressor配置的CSS与JS合并压缩工具
- mysql 读取硬盘数据
- PO VO DAO DTO BO TO概念与区别
- STL容器存储的内容动态分配情况下的内存管理
- Lesson 3-1(语句:条件语句)
- C\C++ 内存对齐现象
- django查询数据库无法过滤月份的解决
- 关于SSH不能连接及报错的问题总结
- 洛谷P3567 KUR-Couriers [POI2014] 主席树/莫队
- 运维相关 docker
- jq 全选与联动的小例子
- 关于控制反转(IOC)容器 ,依赖注入(DI)模式必读文章收集
- R的transform
- java中对JVM的深度解析、调优工具、垃圾回收
- 安装wp8sdk 当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内。
- LeetCode: Regular Expression Matching 解题报告
- 基于skitter的轮播图炫酷效果,幻灯片的体验
热门文章
- gradlew tasks
- 9patch图片
- PAT 甲级 1104. Sum of Number Segments (20) 【数学】
- PAT天梯赛 L2-002. 链表去重 【STL】
- MVC+Ext.net零基础学习记录(五)
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
- Contiki clock模块
- 【LeetCode】053. Maximum Subarray
- float浮动改变display类型
- BZOJ1878:[SDOI2009]HH的项链