序列化(层序遍历)

来源:互联网 发布:视频软件有哪些 编辑:程序博客网 时间:2024/05/18 00:06
使用层序遍历去遍历每一个节点,当该结点为NULL时,str = str+"#!"当该结点非NULL时,str = str+该节点的data+"!"#include <iostream>#include <vector>#include<queue>#include <string>using namespace std;typedef struct TreeNode{    string data;    struct TreeNode* lchild;    struct TreeNode* rchild;}TreeNode;string levelSerialize(TreeNode* T)  //层次序列化{    if (!T)        return "#!";    string str = T->data + "!";    queue<TreeNode*> Q;    Q.push(T);    TreeNode* cur;  //记录每次的出队节点    while (!Q.empty())    {        cur = Q.front();        Q.pop();        if (cur->lchild)        {            str = str + cur->lchild->data + "!";            Q.push(cur->lchild);        }        else            str = str + "#!";        if (cur->rchild)        {            str = str + cur->rchild->data + "!";            Q.push(cur->rchild);        }        else            str = str + "#!";    }    return str;}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);    }}int main(){    TreeNode* s1 = new TreeNode;    TreeNode* s2 = new TreeNode;    TreeNode* s3 = new TreeNode;    TreeNode* s4 = new TreeNode;    TreeNode* s5 = new TreeNode;    TreeNode* s6 = new TreeNode;    TreeNode* s7 = new TreeNode;    s1->data = "1";    s1->lchild = s2;    s1->rchild = s5;    s2->data = "2";    s2->lchild = NULL;    s2->rchild = s3;    s3->data = "3";    s3->lchild = s4;    s3->rchild = NULL;    s4->data = "4";    s4->lchild = NULL;    s4->rchild = NULL;    s5->data = "5";    s5->lchild = s6;    s5->rchild = NULL;    s6->data = "6";    s6->lchild = NULL;    s6->rchild = s7;    s7->data = "7";    s7->lchild = NULL;    s7->rchild = NULL;    cout << "层序遍历" << endl;    levelTraver(s1);    cout << endl;    string s = levelSerialize(s1);    cout << s;    return 0;}