前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer的学习笔记(C#篇)-- 序列化二叉树

剑指Offer的学习笔记(C#篇)-- 序列化二叉树

作者头像
WeiMLing
发布2019-08-23 19:47:36
4440
发布2019-08-23 19:47:36
举报
文章被收录于专栏:WeiMLing

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

一 . 理解题意

二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的转换。将二叉树中的没个结点的空指针引出一个虚节点,其值为一个特定值,比如说 # 字符,我们成这种处理后的二叉树为原来二叉树的扩展二叉树。扩展二叉树和二叉树是一一对应关系。所以下图的前序的序列化序列为:A B # D # # C # #。

二 . 代码实现与分析

代码语言:javascript
复制
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:递归停止条件。点二:递归内容。

其实最近的笔记一直是手写的,没有用画图工具精心去做,一来呢,手写更可以好好的思考,二就是比较快嘛,啊哈哈哈哈...........

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 请实现两个函数,分别用来序列化和反序列化二叉树
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档