日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反序列化(先序)——split : string--vectorstring

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反序列化(先序)——split : string--vectorstring 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反序列化:將string生成二叉樹

先序反序列化操作具體步驟: (1)先將string字符串進行分割,生成多個string構成的集合保存在vector<string>中; (2)將vec<string>中的每一個元素存入到queue<string>中 [說明]此時已經將string轉換成為能夠序列化的queue<string>隊列。 /*****************************************************/3)對queue<string>隊列進行序列化操作 A.參數——queue<string>&,返回值TreeNode* B.獲取隊頭結點存給變量value,并將隊頭結點出隊列判斷value是否等于NULL(即:value == "#")①若等于,返回空;②若不等,則new出T結點,并賦值T->str = value;再遞歸創建左子樹:T->lchild = recon(Q);再遞歸創建右子樹:T->rchild = recon(Q);最后返回T=====================================================#include <vector> #include <string> #include <iostream> #include <queue> using namespace std;typedef struct TreeNode {string data;struct TreeNode* lchild;struct TreeNode* rchild; }TreeNode;vector<string> split(const string &s, const string &seperator) //相當于java中的split函數 { //返回值是string類型的容器vector<string>vector<string> result;typedef string::size_type string_size;string_size i = 0;while (i != s.size()){//找到字符串中首個不等于分隔符的字母;int flag = 0;while (i != s.size() && flag == 0){flag = 1;for (string_size x = 0; x < seperator.size(); ++x)if (s[i] == seperator[x]){++i;flag = 0;break;}}//找到又一個分隔符,將兩個分隔符之間的字符串取出;flag = 0;string_size j = i;while (j != s.size() && flag == 0){for (string_size x = 0; x < seperator.size(); ++x)if (s[j] == seperator[x]){flag = 1;break;}if (flag == 0)++j;}if (i != j){result.push_back(s.substr(i, j - i));i = j;}}return result; }void pretravel(TreeNode* T) //先序遍歷 {if (T != NULL){cout << T->data << " ";pretravel(T->lchild);pretravel(T->rchild);} }TreeNode* Deserialize1(queue<string>& Q) //反序列化操作 {string value = Q.front(); //獲取隊頭元素值,并出隊Q.pop();if (value == "#") //NULL{return NULL;}TreeNode* T = new TreeNode; //創建根節點TT->data = value;T->lchild = Deserialize1(Q); //遞歸創建左子樹T->rchild = Deserialize1(Q); //遞歸創建右子樹return T; }int index = -1; //定義全局變量TreeNode* Deserialize2(vector<string>& Arr) {index++; //依次遍歷vector<string>中的每一個元素if (index >= Arr.size() || Arr[index] == "#"){return NULL;}TreeNode* T = new TreeNode;T->data = Arr[index];T->lchild = Deserialize2(Arr);T->rchild = Deserialize2(Arr);return T; } int main() {string s = "30,10,50,#,#,#,20,45,#,#,35,#,#";vector<string> Arr = split(s, ","); //可按多個字符來分隔queue<string> Q;for (int i = 0; i < Arr.size(); i++) //將vec<string>每一個元素存入到queue<string>隊列中Q.push(Arr[i]);TreeNode* head1 = Deserialize1(Q); //反序列化pretravel(head1); //先序遍歷cout << endl;TreeNode* head2 = Deserialize2(Arr); //反序列化pretravel(head2); //先序遍歷return 0; }

劍指offer(64):序列化二叉樹http://blog.csdn.net/u011080472/article/details/51290794

總結

以上是生活随笔為你收集整理的反序列化(先序)——split : string--vectorstring的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。