1. 程式人生 > >序列化(層序遍歷)

序列化(層序遍歷)

使用層序遍歷去遍歷每一個節點,
當該結點為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; }