序列化二叉樹
二叉樹->字串->二叉樹
思路:
1.層次遍歷bfs(剝洋蔥)轉化為字串,一個位置代表一個節點資訊
2.將字串的資訊轉化為節點->全部的節點串起來
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
if(!root){
return ""; // 判空
}
ostringstream out;
queue<TreeNode*> bfs;
bfs.push(root);
while(!bfs.empty()){
// 迭代法
TreeNode* temp = bfs.front();
bfs.pop();
if(temp){
out<< temp -> val << " ";
bfs.push(temp -> left);
bfs.push(temp -> right);
}
else{
out<<"null "; // 注意 null 後面有空格
}
}
return out.str(); // out 用來將樹轉成字串,元素之間用空格分隔
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if(data=="") return NULL;
istringstream inp(data);
string info{};
vector<TreeNode*> v;
TreeNode* root{};
while(inp>>info){
if(info=="null") v.push_back(NULL);
else v.push_back(new TreeNode(stoi(info)));
}
int pos=1;
for(int i=0;i<v.size()&&pos<v.size();i++){
if(v[i]!=NULL)
{
v[i]->left=v[pos++];
v[i]->right=v[pos++];
}
}
return v[0];
}
};
相關文章
- JZ-061-序列化二叉樹二叉樹
- 面試題37:序列化二叉樹面試題二叉樹
- 刷題系列 - 序列化和反序列化一個二叉樹二叉樹
- LeetCode 297. Serialize and Deserialize Binary Tree 二叉樹序列化反序列化LeetCode二叉樹
- 一文帶你看懂二叉樹的序列化二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 樹和二叉樹簡介二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- n叉樹vs二叉樹二叉樹
- 重建二叉樹二叉樹
- 二叉樹深度二叉樹
- 迭代二叉樹二叉樹
- javascript二叉樹JavaScript二叉樹
- 12、二叉樹二叉樹
- 滿二叉樹二叉樹
- 平衡二叉樹二叉樹
- Java二叉樹Java二叉樹
- 二叉樹---深度二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- C++樹——遍歷二叉樹C++二叉樹