題目描述
請實作兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式保存為字串,從而使得記憶體中建立起來的二叉樹可以持久保存,序列化可以基于先序、中序、后序、層序的二叉樹遍歷方式來進行修改,序列化的結果是一個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示一個結點值的結束(value!),二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹, 思路:思路的話,題目已經說的很直白了,有一點要注意,fun2的引數應該是指標參考型別或者是一個二級指標,用string挺好的,但牛客題目中只給了char *,代碼如下:
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<int> vec; void fun1(TreeNode * root){ if(root==NULL) vec.push_back(0xFFFFFFFF); else{ vec.push_back(root->val); fun1(root->left); fun1(root->right); } } char* Serialize(TreeNode *root) { vec.clear(); fun1(root); int sizes=vec.size(); int * rev=new int[sizes]; for(int i=0;i<sizes;i++) rev[i]=vec[i]; return (char *)rev; } TreeNode * fun2(int * * nums){ if((**nums)==0xFFFFFFFF) { (*nums)++; return NULL; } TreeNode * rev=new TreeNode(**nums); (*nums)++; rev->left=fun2(nums); rev->right=fun2(nums); return rev; } TreeNode* Deserialize(char *str) { int * nums=(int *)str; return fun2(&nums); }};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/24592.html
標籤:其他
上一篇:監督學習總結
下一篇:二叉樹的下一個結點
