序列化(層序遍歷)
阿新 • • 發佈:2018-10-31
使用層序遍歷去遍歷每一個節點,
當該結點為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;
}