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

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

1

2        3

4   #     5   6

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

第二行:输入N个节点,

#include <iostream>
#include <string> #include <vector>
#include <queue> using namespace std; struct treeNode{
int val;
treeNode *left;
treeNode *right;
treeNode(){}
treeNode(int x):
val(x),left(NULL),right(NULL){}
}; int s_to_i(string str){
int v=;
unsigned int i=;
while(i<str.size()){
v=v*+str[i]-'';
}
return v;
}
treeNode* buildTree(int N){
if(N==){
return NULL;
} int i=;
int v=;
char c; cin>>c;
if(c=='#') return NULL; v=c-''; queue<treeNode*> q;
treeNode *root=new treeNode(v);
q.push(root); while(i<N&&!q.empty()){
treeNode *node=q.front();
q.pop(); if(i<N){
cin>>c;i++;
if(c!='#'){
v=c-'';
treeNode *lchild=new treeNode(v);
node->left=lchild;
q.push(lchild);
}
}
if(i<N){
cin>>c;i++;
if(c!='#'){
v=c-'';
treeNode *rchild=new treeNode(v);
node->right=rchild;
q.push(rchild);
}
}
}
return root;
}
void serialize(treeNode *root){
if(root==NULL){
cout<<'#'<<endl;return;
}
cout<<root->val<<endl;
if(root->left!=NULL || root->right!=NULL)
serialize(root->left);
if(root->left!=NULL || root->right!=NULL)
serialize(root->right);
}
int main()
{
int N;
cin>>N;
cout << "Build Tree" << endl;
treeNode *root=buildTree(N);
cout << "serialize Tree" <<endl;
serialize(root);
return ;
}

【剑指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. mysoft

    @@a8649fbb56349908b5ca6708fb94b3ddabcf6b97381a9797d3dfb139b8749287117@@##74e02e1207e5a0a8996ba89f1d6 ...

  2. 关于overflow的学习

    我在此记录一下我的学习到的东西,我自己不清楚所以要记录下来. overflow:hidden 但内元素的高度或宽度大于外元素的高度或宽度时,自动隐藏多余的部分,当然外元素设置了固定的高度或宽度. ov ...

  3. 织梦DEDEcms5.7解决arclist标签调用副栏目文章

    使用arclist标签调用文章的时候才发现,根本无法调用相关文章. 下面给出解决办法,希望帮到需要的人. 找到/include/taglib/arclist.lib.php文件然后打开.然后在大约30 ...

  4. Ext4文件系统修复

    Ext4文件系统修复 目录 一. super block........................................................................ ...

  5. 在linux环境下安装oracle的问题记录

    问题1 xhost:unable to open display 解决办法: 在linux虚拟机本机打开终端,执行 [root@bogon ~]# DISPLAY=:0.0;export DISPLA ...

  6. 标准C语言(9)

    C语言里所有文字信息必须记录在一组连续的字符类型存储区里所有文字信息必须以字符'\0'做结尾,这个字符的ASCII码就是0符合以上两个特征的内容叫字符串,它们可以用来在程序里记录文字信息.字符串里'\ ...

  7. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  8. Eclipse设置模板codetemplates

    在Window->Preferences->Java->Code Style->Code Templates,点击"Import",导入模板codetemp ...

  9. 谈谈对MVC的认识?

    核心思想是:视图和用户交互通过事件导致控制器改变 控制器改变导致模型改变 或者控制器同时改变两者 模型改变 导致视图改变 或者视图改变 潜在的从模型里面获得参数 来改变自己.他的好处是可以将界面和业务 ...

  10. windows时钟服务设置

    运行Regedit,打开注册表编辑器. 找到注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\,将Anno ...