剑指 Offer(第2版)面试题 37:序列化二叉树

剑指 Offer(第2版)面试题 37:序列化二叉树

  • 剑指 Offer(第2版)面试题 37:序列化二叉树
    • 解法1:深度优先搜索

剑指 Offer(第2版)面试题 37:序列化二叉树

题目来源:50. 序列化二叉树

解法1:深度优先搜索

使用 stringstream 流会很方便。

二叉树可以序列化为字符串:

若节点不为空,将节点的 val 直接送入流,如果遇到空指针,将字符串 “null” 送入流,流中节点之间用一个空格区分。深度优先遍历二叉树即可。

字符串反序列化为原始树结构:

每次从流中取出一个字符串 t,当 t 为 “null” 时,返回空结点。否则令 val = stoi(t),以 val 为值建立一个新结点,递归建立它的左子树和右子树。

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution
{
public:// Encodes a tree to a single string.string serialize(TreeNode *root){if (root == nullptr)return "";stringstream ss;dfs_serialize(root, ss);return ss.str();}// 辅函数 - 深度优先搜索建立流void dfs_serialize(TreeNode *root, stringstream &ss){if (root == nullptr)ss << "null" << ' ';else{ss << root->val << ' ';dfs_serialize(root->left, ss);dfs_serialize(root->right, ss);}}// Decodes your encoded data to tree.TreeNode *deserialize(string data){if (data.empty())return nullptr;stringstream ss(data);return dfs_deserialize(ss);}// 辅函数 - 根据流递归建立二叉树TreeNode *dfs_deserialize(stringstream &ss){string t;ss >> t;if (t == "null")return nullptr;int val = stoi(t);TreeNode *root = new TreeNode(val);root->left = dfs_deserialize(ss);root->right = dfs_deserialize(ss);return root;}
};

复杂度分析:

时间复杂度:O(n),其中 n 是二叉树的节点个数。每个节点都会遍历一次。

空间复杂度:O(depth),其中 depth 是二叉搜索树的深度。

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

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

相关文章

运算常见问题

运算常见问题 浮点数常见问题 1.double类型计算问题 首先我们看一下double类型的数据&#xff0c;计算会出现什么问题&#xff1f; public static void main(String[] args) {double amount1 0.1;double amount2 1.2;System.out.println(amount2 - amount1);} 上边程序的…

前后端传参中遇见的问题

前后端传参经常容易出错&#xff0c;本文记录开发springBootMybatis-plusvuecli项目中出现的传参问题及解决办法 1.前后端没有跨域配置&#xff0c;报错 解决方法&#xff1a;后端进行跨域配置&#xff0c;拷贝CorsConfig类 package com.example.xxxx.config;import org.spr…

MATLAB算法实战应用案例精讲-【目标检测】机器视觉-工业相机(补充篇)

目录 知识储备 光学系统设计全过程 算法原理 工业相机基本参数以及选型 工业相机基本参数:

web服务器之——基于虚拟目录和用户控制的web网站

目录 一、虚拟目录 虚拟目录的作用&#xff1a; 二、搭建基于虚拟目录的web网站 1、www服务器配置 2、搭建静态网站 设置防火墙状态 关闭文件访问权限——SeLinux 3、编辑网页资源文件 4、设置虚拟目录 5、向虚拟目录中写入资源 6、重启httpd 三、搭建基…

Flink系列之:监控反压

Flink系列之&#xff1a;监控反压 一、反压二、Task 性能指标三、示例四、反压状态 Flink Web 界面提供了一个选项卡来监控正在运行 jobs 的反压行为。 一、反压 如果你看到一个 task 发生 反压警告&#xff08;例如&#xff1a; High&#xff09;&#xff0c;意味着它生产数…

什么是缓存击穿、缓存穿透、缓存雪崩?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

ssh时怎么同时指定其端口号,以及scp文件到远程的指定端口

如果想要通过 SSH 连接到指定端口的远程服务器&#xff0c;可以在 SSH 命令中使用 -p 或 --port 参数来指定端口号。以下是相应的用法&#xff1a; $ ssh -p <port> userhost其中&#xff0c; 是要连接的端口号&#xff0c;user 是远程服务器上的用户名&#xff0c;host…

postman脚本生成可执行文件(6)

一.通过Python脚本&#xff08;executescript.py&#xff09;执行newman指令 #!usr/bin/python import subprocess from datetime import datetimeclass Newman_automate():Newman_automate():该类主要是定义postman脚本执行__path:cmd命令行中执行newnan脚本指令&#xff08;…

Spring Boot Profiles中文文档

本文为官方文档直译版本。原文链接 Spring Boot Profiles中文文档 引言添加活动配置文件配置文件组通过编程设置配置文件特定的配置文件 引言 Spring Profiles 提供了一种隔离应用程序配置的方法&#xff0c;使其仅在特定环境中可用。任何 Component、Configuration 或 Config…

TCP网络编程案例

InetAddress 类 相关方法: getLocalHost&#xff1a;获取本机InetAddress对象。 getByName&#xff1a;根据指定主机名/域名获取ip地址对象。 getHostName&#xff1a;获取InetAddress对象的主机名。 getHostAddress&#xff1a;获取InetAddress对象的地址。 简单使用&am…

【Vue+Mysql实现前端对接数据库】

文章目录 一、安装环境二、axios 封装和配置2.1 文件 src/utils/request.js 代码2.2 ENV 相关环境文件配置2.3 文件 src/api/login.js 代码三、Mysql 配置链接3.1 数据库配置文件 src/server/db.js 代码3.2 后端 node 服务配置文件 src/server/iondex.mjs 代码一、安装环境 Mys…

C语言—每日选择题—Day50

一天一天的更新&#xff0c;也是达到50天了&#xff0c;精选的题有250道&#xff0c;博主累计做了不下500道选择题&#xff0c;最喜欢的题型就是指针和数组之间的计算呀&#xff0c;不知道关注我的小伙伴是不是一直在坚持呢&#xff1f;文末有投票&#xff0c;大家可以投票让博…

[Big Bird]论文解读:Big Bird: Transformers for Longer Sequences

文章目录 1 介绍2 模型架构3 结果 论文&#xff1a;Big Bird: Transformers for Longer Sequences 作者&#xff1a;Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Am…

【数据结构】树状数组总结

知识概览 树状数组有两个作用&#xff1a; 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改&#xff0c;区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向…

关于“Python”的核心知识点整理大全24

目录 ​编辑 10.1.6 包含一百万位的大型文件 pi_string.py 10.1.7 圆周率值中包含你的生日吗 10.2 写入文件 10.2.1 写入空文件 write_message.py programming.txt 10.2.2 写入多行 10.2.3 附加到文件 write_message.py programming.txt 10.3 异常 10.3.1 处理 Ze…

c语言实验七

实验1&#xff1a;下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数&#xff0c;利用指针odd返回奇数之和&#xff0c;利用指针even返回偶数之和。例如&#xff1a;数组中的值依次为&#xff1a;1&#xff0c;9&#xff0c;2&#xff0…

es6学习(一):变量声明的方式对比:var,let,const

前言 在let和const出现之前,js可以使用var为变量命令,如果是函数也可以用function命名,甚至你可以直接不用任何关键字命名 var a 1function fn() { }b 2console.log(a)console.log(fn)console.log(b) 结果如下 var的特性 1.window环境下,var在最外层定义的变量会直接赋值给…

【JVM从入门到实战】(八)垃圾回收(1)

内存泄漏&#xff1a;指的是不再使用的对象在系统中未被回收&#xff0c;内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放&#xff0c;引入了自动的垃圾回收&#xff08;Garbage Collection简称GC&#xff09;机制。通过垃 圾回收器来对不再使用的…

力扣刷题-二叉树-平衡二叉树

110 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 返回 true 。 给定二叉树 [1…

音画欣赏|《红尘入戏》

《红尘入戏》 46X68cm 陈可之2023年绘 《秋月》 【宋】朱熹 清溪流过碧山头&#xff0c;空水澄鲜一色秋。 隔断红尘三十里&#xff0c;白云红叶两悠悠。 《白日偶无客青山长对门》其四 【宋】韩淲 人生等戏剧&#xff0c;衮衮徒区区。 老身其回头&#xff0c;今有古非无。 -…