剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
一 . 理解题意
二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的转换。将二叉树中的没个结点的空指针引出一个虚节点,其值为一个特定值,比如说 # 字符,我们成这种处理后的二叉树为原来二叉树的扩展二叉树。扩展二叉树和二叉树是一一对应关系。所以下图的前序的序列化序列为: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 = -1; public TreeNode Deserialize(string str) { index += 1; 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:递归停止条件。点二:递归内容。
其实最近的笔记一直是手写的,没有用画图工具精心去做,一来呢,手写更可以好好的思考,二就是比较快嘛,啊哈哈哈哈...........
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构