题意

传送门 LeeCode 297. 二叉树的序列化与反序列化

题解

当二叉树节点的值不相同时,可以根据前序遍历/后序遍历与中序遍历重构二叉树。为了保证节点各不相同,用 dfsdfsdfs 序唯一标识节点值,同时维护节点原值。

设 dfsdfsdfs 序为 ididid,节点值为 valvalval,序列化为 [id,val][id,val][id,val],实现上用栈解析序列。

重构二叉树的基本思想是前序遍历/后序遍历的第一个/最后一个值为根节点的值,在中序遍历中找到根节点所在位置,就可以将前序遍历/后序遍历与中序遍历中左子树与右子树的部分求出,递归求解即可。

class Codec
{typedef pair<int, int> P;
public:string DLR(TreeNode *root, int k){if (root == nullptr) return "";string id = to_string(k), r = to_string(root->val);string chl = DLR(root->left, ++k), chr = DLR(root->right, ++k);return '[' + id + ',' + r + ']' + chl + chr;}string LDR(TreeNode *root, int k){if (root == nullptr) return "";string id = to_string(k), r = to_string(root->val);string chl = LDR(root->left, ++k), chr = LDR(root->right, ++k);return chl + '[' + id + ',' + r + ']' + chr;}// Encodes a tree to a single string.string serialize(TreeNode *root){return DLR(root, 0) + LDR(root, 0);}vector<P> parse(string &data){vector<P> res;stack<char> st;for (int i = data.length() - 1; i >= 0; i--){if (data[i] == '['){bool fi = false, fv = false;int id = 0, val = 0;while (st.top() != ','){if (st.top() == '-') fi = true;else id = id * 10 + st.top() - '0';st.pop();}st.pop();while (st.top() != ']'){if (st.top() == '-') fv = true;else val = val * 10 + st.top() - '0';st.pop();}st.pop();res.push_back(P(id * (fi ? -1 : 1), val * (fv ? -1 : 1)));}else st.push(data[i]);}reverse(res.begin(), res.end());return res;}TreeNode *reconstruct(vector<P> &data, int l1, int r1, int l2, int r2){if (r1 - l1 == 0) return nullptr;int i = l2, id = data[l1].first;while (i < r2 && data[i].first != id) ++i;i -= l2;TreeNode *root = new TreeNode(data[l1].second);root->left = reconstruct(data, l1 + 1, l1 + i + 1, l2, l2 + i);root->right = reconstruct(data, l1 + i + 1, r1, l2 + i + 1, r2);return root;}// Decodes your encoded data to tree.TreeNode *deserialize(string data){vector<P> val = parse(data);int sz = val.size() / 2;return reconstruct(val, 0, sz, sz, sz * 2);}
};

LeeCode 297 dfs相关推荐

  1. python读取html中的表格数据_Python 数据处理(十八)—— HTML 表格

    HTML 1 读取 HTML 内容 顶级 read_html() 函数可以接受 HTML 字符串.文件或URL,并将 HTML 表解析为 pandas DataFrames 列表. 注意:即使 HTM ...

  2. Leecode DFS深度优先搜索

    定义 图解 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一 ...

  3. 力扣-297题 二叉树的序列化与反序列化(C++)- dfs

    题目链接:https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ 题目如下: /*** Definition for a ...

  4. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MB Submit: xxx  ...

  5. Leecode题解汇总(附题型归类)

    虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...

  6. Leecode22. 括号生成——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  7. Leecode17. 电话号码的字母组合——Leecode大厂热题100道系列

    我是小张同学,立志用最简洁的代码做最高效的表达 以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 传送门-->Leecode大厂热题100道系列题解 问题描 ...

  8. Leecode大厂热题100道系列题解

    最近规划利用空闲时间,刷一遍大厂笔试中出题频率Top100的算法题,以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言! 题解会定期维护和更新! 序号 题解 分类 T ...

  9. zzuli oj 2532: 婷婷是土豪 DFS深搜

    2532: 婷婷是土豪 题目描述 众所周知婷婷是我们组大土豪,组里找他借钱和还钱的都有一大堆,借钱的太多了,每天晚上他都要抱怨没钱了. 每天早上,找婷婷借钱的都排成一条长队,假设还钱的有m个,借钱的有 ...

最新文章

  1. Web 开发人员必备的随机 JSON 数据生成工具
  2. 涨姿势,Java中New一个对象是个怎么样的过程?
  3. C# winform版 nbtstat
  4. php和python写爬虫-一个简单的Python写的XML爬虫
  5. Android --- 两种设置字体加粗的方法
  6. 荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告
  7. shoot for用法
  8. 海外ubuntu,lamp,ftp,phpmyadmin配置
  9. onload、DOMContentLoaded、$(document).ready(fn)、$(document).load(fn)
  10. 求锤得锤,你要的一致性 hash 来了! | 附代码
  11. windows下安装jmeter
  12. 怎么在长方体上挖孔_被雷军狂喷的挖孔屏到底好不好?分析你必须知道的优缺点!...
  13. 大数据发展现状和趋势
  14. 模拟器安装 xposed
  15. mysql安装ecshop_ecshop图文安装过程详解
  16. 移动硬盘 无法访问 解决方法
  17. 从平凡到不平凡(转)
  18. JSONObject遍历并替换部分json值
  19. Go面向对象编程的三大特性
  20. [BZOJ]4755: [Jsoi2016]扭动的回文串

热门文章

  1. django认证系统实现自定义权限管理的方法 - python
  2. 医学图像处理 |——RGB、灰度、索引图像相互转换
  3. 乐观锁和悲观锁的使用场景及应用
  4. Fanuc机器人使用宏启动
  5. 【对讲机的那点事】IC-70A/IC-T70E对讲机常见问题处理的方法
  6. 苹果手机电视投屏怎么设置_OPPO电视投屏怎么设置 OPPO电视投屏教程
  7. hdoj4857逃生
  8. 宇宙代码与磁子计算机,“上天”还不满足,这些人居然想养个宇宙当宠物
  9. unity 全局照明烘焙_Unity 5中的全局照明
  10. 今日头条招聘编辑党员优先;支付宝回应账单隐私风险;携程下架价格欺诈雪乡酒店丨价值早报