反序列化(层序)
来源:互联网 发布:java培训机构课程安排 编辑:程序博客网 时间:2024/05/29 08:13
反序列化操作(层序):将序列生成层序遍历的二叉树 取出string数组中的每一个str[i]元素,根据str[i]是否是#进行处理,(1)当str[i]=="#"时,返回NULL,不创建新节点(2)当str[i]!="#"时,创建新的节点,返回该节点#include <iostream>#include<queue>#include <string>using namespace std;typedef struct TreeNode{ string data; struct TreeNode* lchild; struct TreeNode* rchild;}TreeNode;void levelTraver(TreeNode* T) //层次遍历{ if (!T) return; queue<TreeNode*> Q; TreeNode* cur = T; Q.push(cur); while (!Q.empty()) { cout << Q.front()->data << " "; cur = Q.front(); Q.pop(); if (cur->lchild) Q.push(cur->lchild); if (cur->rchild) Q.push(cur->rchild); }}TreeNode* NodebyString(string s) //根据s的值{ if (s == "#") //若str[i]的值为#,则不创建节点 return NULL; else //否则,创建节点并返回 { TreeNode* node = new TreeNode; node->data = s; return node; }}TreeNode* levelDeSerialize(string str[]) //层序反序列化{ int index1 = 0; TreeNode* T = NodebyString(str[index1++]); queue<TreeNode*> Q; if (T != NULL) Q.push(T); TreeNode* cur; while (!Q.empty()) { cur = Q.front(); Q.pop(); cur->lchild = NodebyString(str[index1++]); cur->rchild = NodebyString(str[index1++]); if (cur->lchild) Q.push(cur->lchild); if (cur->rchild) Q.push(cur->rchild); } return T;}int main(){ string str[] = { "1", "2", "3", "#", "4", "5", "#", "#", "#", "#", "#" }; TreeNode* T = levelDeSerialize(str); //反序列化 cout << "层序遍历" << endl; levelTraver(T); return 0;}
阅读全文
0 0
- 反序列化(层序)
- 反序列化(先序)
- 使用层序遍历序列化和反序列化二叉树
- Tree前序反序列化
- 序列化反序列化(一)
- .net 反序列化(LitJSON)
- 反序列化
- Xml 反序列化
- 反序列化对象
- 反序列化问题解决
- json 反序列化
- Json反序列化
- xml反序列化
- xml反序列化
- android 反序列化
- php 反序列化
- json反序列化
- json反序列化
- expect详解
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Connection类
- cvte2018秋季招聘c++开发面试面经
- 数据库连接池的类别
- 反序列化(层序)
- 4. Median of Two Sorted Arrays
- Lua语法结构之表达式
- intersection set
- 好久不见>_< 转载 java有关泛型方法重载
- c++循环语句中变量的生存周期
- usaco Milking Cows
- C语言初步-第32讲:循环思想启蒙(输出小星星)
- 指针 和引用 || 静态成员函数 || 虚函数 || 系统调用和库函数 ||