反序列化(层序)

来源:互联网 发布: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;}