当前位置: 首页 > news >正文

2023-09-04力扣每日一题

链接:

449. 序列化和反序列化二叉搜索树

题意:

把一个二叉搜索树变成字符串,还要能变回来

解:

和剑指 Offer 37. 序列化二叉树差不多,那个是二叉树的序列化/反序列化-Hard

直接CV了,懒: (`

如果是二叉搜索树的话,就相当于知道了中序遍历,前序/后序弄一个就行

实际代码:

string int2string(int x)
{string ret;if(x==0) return "0";while(x){ret=char('0'+x%10)+ret;x/=10;}return ret;
}
int string2int(string s)
{int ret=0;for(auto &ch:s){ret=ret*10+int(ch-'0');}return ret;
}
void node2string(string& s,TreeNode* root)
{s.append(int2string(root->val));if(root->left!=nullptr){s.append(",");node2string(s,root->left);}else s.append(",N");if(root->right!=nullptr){s.append(",");node2string(s,root->right);}else s.append(",N");
}
string serialize(TreeNode* root)
{string tree;if(root==nullptr) return tree;node2string(tree,root);//cout<<"tree:"<<tree<<endl; return tree;
}
void string2node(TreeNode* root,string& data)
{string s;int r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));if(s=="N") root->left=nullptr;else{root->left=new TreeNode(string2int(s));string2node(root->left,data);}r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));if(s=="N") root->right=nullptr;else{root->right=new TreeNode(string2int(s));string2node(root->right,data);}
}
TreeNode* deserialize(string data)
{TreeNode* newHead=nullptr;if(data.empty()) return newHead;string s;int r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));newHead=new TreeNode(string2int(s));string2node(newHead,data);return newHead;
}

限制:

  • 树中节点数范围是 [0, 104]
  • 0 <= Node.val <= 104
  • 题目数据 保证 输入的树是一棵二叉搜索树。
http://www.lryc.cn/news/155903.html

相关文章:

  • jQuery成功之路——jQuery事件和插件概述
  • Java ArrayList类详解
  • 快速排序学习
  • 【Vue3 知识第二讲】Vue3新特性、vue-devtools 调试工具、脚手架搭建
  • pytorch 基于masking对元素进行替换
  • Cyber RT学习笔记---7、Component组件认知与实践
  • 常见配置文件格式INI/XML/YAML/JSON/Properties/TOML/HCL/YAML Front Matter/.env介绍及实例
  • JS 方法实现复制粘贴
  • 后端面试话术集锦第 十六 篇:java锁面试话术
  • SystemVerilog 第5章 面向对象编程基础
  • 指针进阶(1)
  • 蝶形运算法
  • day 48|● 583. 两个字符串的删除操作 ● 72. 编辑距离
  • 服务器(I/O)之多路转接
  • 后端面试话术集锦第 十三 篇:java集合面试话术
  • 《微服务架构设计模式》第一章
  • 前端是如何打包的
  • Qt 5.15编译(MinGW)及集成Crypto++ 8.7.0笔记
  • Qt 简单闹钟
  • 简单谈下Spring、Spring MVC和Spring Boot
  • 利用python进行视频下载并界面播放快速下载素材
  • [C++][pcl]pcl安装后测试代码3
  • 在WSL下使用makefile运行modelsim进行混合编译
  • idea 常用插件和常用快捷键 - 记录
  • IDEA报错:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found
  • C++——Vector:push_back和emplace_back的区别,测试写入1GB大数据时的性能差距
  • C/C++/QT/Python/MATLAB获取文件行数的示例
  • mysql的binlog參數詳解
  • 【SpringSecurity】九、Base64与JWT
  • Python的io模块