剑指offer 面试题37:序列化二叉树 c++_别说话写代码的博客-程序员宝宝_c++ 面试 序列化

技术标签: # 剑指offer刷题c++/python  剑指offer  数据结构/算法/刷题  面试题37  序列化二叉树  反序列化二叉树  

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

思路:用dfs的思想,用前序遍历来序列化和反序列化二叉树

参考思路:https://blog.csdn.net/u011475210/article/details/78889876

(1)用vector,不用考虑逗号操作

(2)用string

(3)用stringstream,代码更加简洁

 

基于vector代码 如下

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<int> buf;
    void dfs1(TreeNode *root)
    {
        if(root == nullptr)
        {
            buf.push_back(0xFFFFFFFF);
            return ;
        }
        buf.push_back(root->val);
        dfs1(root->left);
        dfs1(root->right);
    }
    TreeNode *dfs2(int* &n)
    {
        if(*n==0xFFFFFFFF)
        {
            n++;
            return nullptr;
        }
        TreeNode *p = new TreeNode(*n);
        n++;
        p->left = dfs2(n);
        p->right = dfs2(n);
        return p;
    }
    char* Serialize(TreeNode *root) {    
        dfs1(root);
        int bufSize = buf.size();
        int *res = new int[bufSize];
        for(int i = 0;i < bufSize; i++) res[i] = buf[i];
        return (char*)res;
    }
    TreeNode* Deserialize(char *str) {
        int *p = (int*) str;
        return dfs2(p);
    }
};

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21997625/article/details/84633245

智能推荐

linux exec ps,windows上通过Runtime.getRuntime().exec.()执行linuxshell脚本_weixin_39752215的博客-程序员宝宝

windows下通过Runtime.getRuntime().exec.()执行linuxshell脚本执行Runtime.getRuntime().exec("ps -ef|grep indexer");一直抛ERROR: Unsupported SysV option.于是便去就按照这个error信息去百度、google找答案,未果。。。看到网上相关问题解决方法(如下),我尝试Runtime....

小白记录,以便回忆:C# Windows窗口控件应用——openFileDialog(打开文件控件应用)savefiledialog(保存文件控件应用)_柳岸残雨的博客-程序员宝宝

前言:实验室目前一个项目是用C#写的界面,读取inSQL、SQLserver数据库中的数据转存到MySQL。正在一步一步看代码。打开文件与保存文件控件使用新建添加控件:其中:“打开文件”“关闭文件“为:Button控件。“文件路径:”“(文件路径)”为label控件;空白区域为:textbox控件下面两个openFileDialog打开文件控件、savefiledialog保存文件控件直接上代码,都已经注释了:using System;using System.Collections

bootstrap table使用总结_PKyourself的博客-程序员宝宝_operateformatter(value, row, index) {中使用内置if判断

官网介绍:基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。 主要功能支持 Bootstrap 3 和 Bootstrap 2自适应界面固定表头非常丰富的配置参数直接通过标签使用显示/隐藏列显示/隐藏表头通过 AJAX 获取 JSON 格式的数据支持...

linux内存分析工具pmap_QZero_0的博客-程序员宝宝

pmap工具是linux的工具,能够查看进程用了多少内存,还能分析内存用在上面环节,对于一些长期占用内存居高不下的程序可以分析其行为,命令简单,信息简洁。

什么是SQL Server故障转移群集_culuo4781的博客-程序员宝宝

什么是故障转移群集? (What is a failover cluster?) SQL Server故障转移群集由一组服务器组成,这些服务器以特殊方式运行启用群集的应用程序以最大程度地减少停机时间。 故障转移是如果一个节点崩溃或变得不可用,而另一个节点接管并自动重新启动应用程序而无需人工干预的过程, SQL Server故障转移群集提供什么? (What does SQL Server fa...

SpringCloud alibaba openFeign调用教程_克己723的博客-程序员宝宝

1.想要远程调用别的服务 1)pom文件中引入open-feign依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-openfeign&lt;/artifactId&gt; &lt;/dependency&gt;2)先在一个微服务.

随便推点

freescale XEP100 PAGE RAM的基本分配与应用(续)_win2000_li的博客-程序员宝宝

为了能正确的使用PAGE段的数据与程序,需要设置如下:在Standard Settings里的设置Options里的设置Code Generation里的设置EPAGE register is used for paging = 0x17GPAGE register is used for paging = 0x10PPAGE register is used for pagi...

打开桌面计算机投屏到扩展屏,苹果电脑投屏到显示器的三种常见方式_公子谬的博客-程序员宝宝

苹果电脑投屏到显示器的三种常见方式AWIND奇机无线投屏器作为专业的跨屏设备,在“商教领域”备受用户青睐。对于AWIND奇机无线投屏器来说,苹果电脑投屏到显示器【投影机、电视机、一体机】与Windows电脑投屏到大屏幕上没有区别。苹果电脑投屏到显示器:一种利用USB按键的无线投屏器,一种是利用MacBook自带的Airplay屏幕镜像进行投屏。利用USB按键的1、将显示屏幕通过HDMI线与AWIN...

jsp基本语法&表单提交方式_jsp表单提交_時宜的博客-程序员宝宝

一、URL的组成部分URL由三个部分组成:协议 主机 端口例如:http://localhost:8080 这里的http--指的是超文本协议 localhost--指的是主机 8080--指的是端口二、什么是JSP?1、JSP简介JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以&lt;%开头以%&gt;结束JSP是一种Java Servlet,主要用于实现Java web应用程序的用户界面部.._1671465600

kubernetes从入门到放弃之k8s介绍_你过来呀~~~的博客-程序员宝宝

kubernetes概述kubernetes是Google在2014年开源的一个容器集群管理系统,简称k8s;k8s用于容器化应用程序的部署,扩展和管理;k8s提供了容器编排、资源调度、弹性伸缩、部署管理、服务发现等一系列功能;k8s官方网址 https://www.kubernetes.iokubernetes特性自我修复在节点故障时,重启失败的容器,替换以及重新部署,保证...

kvm虚拟化学习笔记(三)之windows kvm虚拟机安装_weixin_33907511的博客-程序员宝宝

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://koumm.blog.51cto.com/703525/1290191KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安...

什么是计算机?计算机硬件详细介绍和参数解读[2]_凌凌1301的博客-程序员宝宝_显示器算外设吗

计算机,一般情况下指电脑,但其实计算机是一个很大的概念,从半导体到冯诺依曼架构再到DOS,计算机在当今社会已经出现在了每家每户里,你的手机、平板、电视、扫地机器人,都属于"计算机"在上篇文章里面我们简单的讲了电脑机箱的内部主要硬件(不可少的),今天我们来了解一下计算机的其他硬件吧,现在大多数计算机想要控制,就需要鼠标和键盘,想要查看画面,就需要显示器...1.显示器,属于电脑的"外设",将一定的电子文件通过特定的传输设备显示到屏幕上再反射到人眼的显示工具显示器很好理解,举个例子,一张图片,如果以

推荐文章

热门文章

相关标签