序列化过程很简单,如果是采用先序序列,那么对先序遍历做出改变即可;

层序遍历建立二叉树,如:

1

2        3

4   #     5   6

输入第一行:将要输入的节点的个数N,如上面的为7;

第二行:输入N个节点,

  1. #include <iostream>
  2. #include <string>
  3.  
  4. #include <vector>
  5. #include <queue>
  6.  
  7. using namespace std;
  8.  
  9. struct treeNode{
  10. int val;
  11. treeNode *left;
  12. treeNode *right;
  13. treeNode(){}
  14. treeNode(int x):
  15. val(x),left(NULL),right(NULL){}
  16. };
  17.  
  18. int s_to_i(string str){
  19. int v=;
  20. unsigned int i=;
  21. while(i<str.size()){
  22. v=v*+str[i]-'';
  23. }
  24. return v;
  25. }
  26. treeNode* buildTree(int N){
  27. if(N==){
  28. return NULL;
  29. }
  30.  
  31. int i=;
  32. int v=;
  33. char c;
  34.  
  35. cin>>c;
  36. if(c=='#') return NULL;
  37.  
  38. v=c-'';
  39.  
  40. queue<treeNode*> q;
  41. treeNode *root=new treeNode(v);
  42. q.push(root);
  43.  
  44. while(i<N&&!q.empty()){
  45. treeNode *node=q.front();
  46. q.pop();
  47.  
  48. if(i<N){
  49. cin>>c;i++;
  50. if(c!='#'){
  51. v=c-'';
  52. treeNode *lchild=new treeNode(v);
  53. node->left=lchild;
  54. q.push(lchild);
  55. }
  56. }
  57. if(i<N){
  58. cin>>c;i++;
  59. if(c!='#'){
  60. v=c-'';
  61. treeNode *rchild=new treeNode(v);
  62. node->right=rchild;
  63. q.push(rchild);
  64. }
  65. }
  66. }
  67. return root;
  68. }
  69. void serialize(treeNode *root){
  70. if(root==NULL){
  71. cout<<'#'<<endl;return;
  72. }
  73. cout<<root->val<<endl;
  74. if(root->left!=NULL || root->right!=NULL)
  75. serialize(root->left);
  76. if(root->left!=NULL || root->right!=NULL)
  77. serialize(root->right);
  78. }
  79. int main()
  80. {
  81. int N;
  82. cin>>N;
  83. cout << "Build Tree" << endl;
  84. treeNode *root=buildTree(N);
  85. cout << "serialize Tree" <<endl;
  86. serialize(root);
  87. return ;
  88. }

【剑指offer37】二叉树的序列化的更多相关文章

  1. 剑指Offer37 二叉树深度与平衡二叉树判断

    /************************************************************************* > File Name: 37_TreeDe ...

  2. 剑指Offer-37.二叉树的深度(C++/Java)

    题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 递归求解左右子树的最大值即可,每遍历到一个结点,深度加1,最后 ...

  3. 剑指Offer——二叉树

    剑指Offer--二叉树 前言 数据结构通常是编程面试中考察的重点.在参加面试之前,应聘者需要熟练掌握链表.树.栈.队列和哈希表等数据结构,以及它们的操作.本片博文主要讲解二叉树操作的相关知识,主要包 ...

  4. JS数据结构与算法 - 剑指offer二叉树算法题汇总

    ❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...

  5. 剑指offer 二叉树中和为某一个值的路径

    剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...

  6. 剑指offer 二叉树的层序遍历

    剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...

  7. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  8. 剑指offer-08 二叉树的下一个节点

    剑指offer第8题,本来想找leetcode上对应的题,后来没找到,直接去牛客网上刷了. 题目描述: 给定一个二叉树和其中的一个结点(pNode),请找出中序遍历顺序的下一个结点并且返回.注意,树中 ...

  9. 《剑指offer》:[62]序列化二叉树

    题目:请实现两个函数,分别来序列化和反序列化二叉树. 方案分析:我们知道通过二叉树的中序和任何一个前或者后续遍历都可以反序列化一棵二叉树,但是这样做有一个缺点就是,序列化的数据不能有重复的数据,否则会 ...

随机推荐

  1. dedecms 公共模板写法 提高生成速度

    {dede:include file="/temp/liuxingfushi.html" ismake='no'/}

  2. @Validated @RequestBody @RequestParam配合使用校验参数

    1.  @Validated @RequestBody 配合使用 两者搭配进行参数的校验,要想自己捕获该异常,需要自定义全局异常处理器 2.  @Validated @RequestParam 配合使 ...

  3. Zookeeper启动失败,报错 can not open chanel to 2

    zookeeper 3.4.8 安装在 7 台不同的虚拟机上,配置文件如下: tickTime= initLimit= syncLimit= dataDir=/var/zookeeper client ...

  4. 普元 BPS表结构参考

    BPS表结构 BPS默认采用数据库方式对业务流程的定义以及运行期的流程实例.活动.工作项等进行持久化存储.主要包括BPS流程流转相关的定义.实例.工作项.参与者相关的数据表以及和实际业务流程控制相关的 ...

  5. CSS如何修改placeholder样式

    项目用经常遇到修改input的placeholder的颜色的需求,这里来看一下placeholder如何用css设置: 原文发布与我的个人博客>> 首先来看一下chrome默认的input ...

  6. python---wav音频

    import pyaudio #导入库 import wave #导入wav音频库 import sys from PyQt5.QtWidgets import QApplication, QWidg ...

  7. springboot 开启缓存

    Caching Data with Spring This guide walks you through the process of enabling caching on a Spring ma ...

  8. C# 常用方法—— 32位MD5加密

    其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// 32位MD5加密(小写) /// ...

  9. redis string类型设置过期时间后 再进行set操作,会清除过期时间

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

  10. 2、DockPanel

    DockPanel——停靠面板,内部控件或容器可以放置在上.下.左(默认).右.类似于Java AWT布局中的BorderLayout. 但与BorderLayout不同的是,每一个区域可以同时放置多 ...