LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 前序遍歷
- 2.2 層序遍歷
1. 題目
序列化是將一個數(shù)據(jù)結(jié)構(gòu)或者對象轉(zhuǎn)換為連續(xù)的比特位的操作,進(jìn)而可以將轉(zhuǎn)換后的數(shù)據(jù)存儲在一個文件或者內(nèi)存中,同時也可以通過網(wǎng)絡(luò)傳輸?shù)搅硪粋€計算機(jī)環(huán)境,采取相反方式重構(gòu)得到原數(shù)據(jù)。
二叉樹,字符 ,互轉(zhuǎn)
《劍指Offer》同題:面試題37. 序列化二叉樹
449. 序列化和反序列化二叉搜索樹
2. 解題
類似題解:
LeetCode 331. 驗證二叉樹的前序序列化
LeetCode 428. 序列化和反序列化 N 叉樹(DFS)
2.1 前序遍歷
class Codec { public:// Encodes a tree to a single string.string serialize(TreeNode* root) {ostringstream out;serialize(root,out);return out.str();}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {istringstream in(data);return deserialize(in);} private:void serialize(TreeNode* root,ostringstream &out){if(root){out<< root->val << ' ';serialize(root->left,out);serialize(root->right,out);}elseout << "N "; }TreeNode* deserialize(istringstream &in){string val;in >> val;if(val == "N"){return NULL;}TreeNode* root = new TreeNode(stoi(val));root->left = deserialize(in);root->right = deserialize(in);return root;} };2.2 層序遍歷
class Codec { public:// Encodes a tree to a single string.string serialize(TreeNode* root) {if(root == NULL) return "";queue<TreeNode*> q;TreeNode* node;q.push(root);ostringstream out;while(!q.empty()){node = q.front();q.pop();if(node == NULL) out << "N ";else{out << node->val << " ";q.push(node->left);q.push(node->right);}} return out.str();}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {if(data.empty()) return NULL;istringstream in(data);string s;in >> s;TreeNode* root = new TreeNode(stoi(s)); queue<TreeNode*> q;TreeNode* node;q.push(root); while(!q.empty()){node = q.front();q.pop();in >> s;if(s[0] == 'N')node->left = NULL;else{node->left = new TreeNode(stoi(s));q.push(node->left);}in >> s;if(s[0] == 'N')node->right = NULL;else{node->right = new TreeNode(stoi(s));q.push(node->right);}} return root;} };我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1363. 形成三的最
- 下一篇: LeetCode 1394. 找出数组中