序列化二叉樹

演算法推薦管發表於2021-11-09

在這裡插入圖片描述
二叉樹->字串->二叉樹
思路:
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];
    }
};

相關文章