Leetcode Hot100 第40题 297.二叉树的序列化和反序列化

发布于:2025-03-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

在这里插入图片描述
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Codec {
public:
    int index;
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        string res = "";
        dfs_encode(root, res);
        return res;
    }
    void dfs_encode(TreeNode* root, string& str){
        if(root==NULL){
            str += "None,";
        }else{
            str += to_string(root->val) + ',';
            dfs_encode(root->left,str);
            dfs_encode(root->right,str);
        }
    }
    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        vector<string> datalist;
        string str;
        for(char c:data){
            if(c != ','){
                str +=c;
            }else{
                datalist.push_back(str);
                str = "";
            }
        }
        if(!str.empty()){
            datalist.push_back(str);
            str = "";
        }
        index = 0;
        return dfs_decode(datalist);
    }
    
    TreeNode* dfs_decode(vector<string>& datalist){
        if(datalist[index]=="None"){
            index++;
            return NULL;
        }
        TreeNode* node = new TreeNode(stoi(datalist[index++]));
        node->left = dfs_decode(datalist);
        node->right = dfs_decode(datalist);
        return node;
    }
};

// Your Codec object will be instantiated and called as such:
// Codec ser, deser;
// TreeNode* ans = deser.deserialize(ser.serialize(root));