剑指offer——面试题62:序列化二叉树

Solution1:

参考网址:https://www.nowcoder.com/profile/6475323/codeBookDetail?submissionId=19293787
书上的思路。理解记忆~

/*1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点
不为空时,在转化val所得的字符之后添加一个' , '作为分割。对于空节点则以 '#' 代替。2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树(特别注意:
在递归时,递归函数的参数一定要是char ** ,这样才能保证每次递归后指向字符串的指针会
随着递归的进行而移动!!!)
*/
/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};
*/
class Solution {public:char* Serialize(TreeNode *root) { //序列化接口函数if (root == NULL)return NULL;string str;my_serialize(root, str);//字符串转char *char *ret = new char[str.length() + 1];for (int i = 0; i < str.length(); i++)ret[i] = str[i];ret[str.length()] = '\0';return ret;}void my_serialize(TreeNode *root, string &str) {if (root == NULL) {str += '#';//用#代表nullreturn;//返回上一层} else {string r = to_string(root->val);//值转字符串str += r;//字符串拼接str += ',';//数字后用,进行节点分隔my_serialize(root->left, str);my_serialize(root->right, str);}}TreeNode* Deserialize(char *str) {if (str == NULL)return NULL;TreeNode *res = deserialize(&str);return res;}TreeNode *deserialize(char **str) {if (**str == '#') { //空的时候返回++(*str);return NULL;}int num = 0;while (**str != '\0' && **str != ',') {num = num * 10 + ((**str) - '0'); //求出每个节点的值++(*str);}TreeNode *root = new TreeNode(num);if (**str == '\0')return root;else(*str)++;//跨过','root->left = deserialize(str);root->right = deserialize(str);return root;}};

【重点】剑指offer——面试题62:序列化二叉树相关推荐

  1. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径

    剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...

  2. 剑指offer——面试题58:二叉树的下一个结点

    剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...

  3. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  4. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  5. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...

  6. [剑指offer]面试题19:二叉树的镜像

    面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNo ...

  7. 《剑指Offer》37:序列化二叉树

    题目 请实现两个函数,分别用来序列化和反序列化二叉树. 分析 我们清楚可以通过前序遍历序列和中序遍历序列创造出一棵二叉树.因此,我们可以先把一棵二叉树序列化成一个前序遍历序列和一个中序遍历序列,然后在 ...

  8. 剑指offer(61)序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目分析 首先拿到题目时候,我先想到的是什么是序列化二叉树?序列化主要就是在前后端交互时候需要转换下,毕竟网络传输的是流式数据(二进制或者文本 ...

  9. 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)

    1. 题目 0,1,-,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次 ...

最新文章

  1. 高速上车辆追尾无法移动 众人齐力抬车温暖归途
  2. python的工作方向-python职业发展方向有哪些,各有什么优劣?
  3. TTL and CMOS 的几个基本功能模块
  4. win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
  5. Python笔记---错误笔记
  6. vs2008软件测试实战 3 web test(1)
  7. linux卸载jdk权限不够,linux中卸载jdk,一个简单有关问题整了一上午
  8. python贪吃蛇简单代码_Python贪吃蛇简单的代码
  9. 办公软件 excle word 技巧 教程 电子书 免费 下载
  10. win10安装wget,从此可以更快的下载文件 and windows10 下 zip命令行参数详解
  11. Python 查看微信撤回消息
  12. 《大数据架构和算法实现之路:电商系统的技术实战》——3.2 案例实践
  13. unity-3d摄像头
  14. 20135323符运锦---信息安全系统设计基础第一周学习总结
  15. Android 逆向基础
  16. tim-js-sdk 登录、接收信息、发送消息
  17. java 上传文件-生成文件首页缩略图 生成pdf 抓取图片
  18. 数据库在网站中的作用
  19. 【面经】华为车BU面经
  20. 研究记录02—EKF_SLAM ——2012.4 Joan Sola

热门文章

  1. pytho---之easydict使用
  2. Linux下合并分解加密解密PDF文件
  3. OpenCV图像处理(17)—— 各种二值化对比
  4. 希尔排序java代码_希尔排序及希尔排序java代码
  5. python dll 调用 方法未找到_大牛经验分享之谈:Python调用.NET库的方法步骤(建议收藏)...
  6. 985计算机只考数据结构,初试只考数据结构的985院校
  7. python字符串find_Python字符串find()
  8. python 日期格式打印_Python打印格式
  9. Android RxJava和改造
  10. java序列化 反序列化_Java序列化– Java序列化