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

反序列化(層序)

反序列化操作(層序):將序列生成層序遍歷的二叉樹

    取出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; }