题解 | 序列化二叉树

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
#include <string>
#include <vector>
class Solution {
public:
    char* Serialize(TreeNode *root) {  
        if(root==nullptr)
        {
            char* p = new char[2];
            p[0] = '#';
            p[1] = '\0';
            return p;
        }
        queue<TreeNode*> q;  
        vector<string> res;
        q.push(root);
        TreeNode* cur =nullptr;
        while(!q.empty())
        {
            cur=q.front();
            q.pop();
            if(cur==nullptr)
            {
            res.push_back("#");
            }
            else
            {
                res.push_back(to_string(cur->val));
                q.push(cur->left);
                q.push(cur->right);
            }
        }
        string result;
        for(int i=0;i<res.size();i++)
        {
              if(i==0)
              {
                result=res[0];
              }
              else {
              result +=","+res[i];
              }
        } 
        char* cstr = new char[result.size()+1];
        strcpy(cstr,result.c_str());

        return cstr;
    }
    TreeNode* Deserialize(char* str) {
        if(str==nullptr)
        {
            return nullptr;
        }
          string   strDes(str);
        if(strDes.empty() ||strDes=="#")
        {
            return nullptr;
        }
        queue<TreeNode*> q;
        stringstream ss(strDes);
        string resstr;
        TreeNode* root = nullptr;
        //通过字符串流创建队列
        //边解析,边建树
        //创建根节点
        getline(ss,resstr,',');
        int val = stoi(resstr);
        root = new TreeNode(val);
        q.push(root);
          while(!q.empty())
          {
            TreeNode* cur = q.front();
            q.pop();
            if(getline(ss,resstr,',')&&resstr!="#")
            {
                TreeNode* left = new TreeNode(stoi(resstr));
                cur->left=left;
                q.push(left);
            }
            if(getline(ss,resstr,',')&&resstr!="#")
            {
                TreeNode* right = new TreeNode(stoi(resstr));
                cur->right=right;
                q.push(right);
            }
          }
          return root;
    }
};

全部评论

相关推荐

12-16 22:45
已编辑
电子科技大学 活动运营
Rain_Codin...:简历感觉有点乱了而且一股AI味,AI简历的一个特点就是废话很多,一个点能分成四个点来讲,可以仔细优化一下。 btw,手机看简历不好看出来,可以把电脑上的简历截图放出来。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务