剑指offer37:序列化二叉树

 

分析:首先审题emmm

好像看懂了,又好像没看懂......

然后去看官方题解去,emmm,好家伙,原来还能随便序列化,只要自己的序列化和反序列化可以相互转化就好了,淦,原来是没审题审仔细......

其实题目呢是这个意思,就是让我们把树转化为一个字符串序列,这叫做序列化,然后根据一个字符串可以构造出一颗二叉树,这叫反序列化,emmm,至于中间形式,好像也没有什么严格要求,序列化的方式好像可以层序,前序(大部分题解),emmm,不知道这题为什么是困难,可能是题目中给的信息,有点不全?造成理解困难?

以下是基本cv的官方题解代码(前序实现的):

class Codec {
public:

    // Encodes a tree to a single string.
    void serializeCore(TreeNode* root,string &s)
    {
        if(root==NULL)
        {
            s+="None,";
            return;
        }
        s+=to_string(root->val)+",";
        serializeCore(root->left,s);
        serializeCore(root->right,s);
    }

    string serialize(TreeNode* root) 
    {
        string s;
        serializeCore(root,s);
        return s;
    }


    // Decodes your encoded data to tree.
    TreeNode* deserializeCore(list<string>& dataArray)
    {
        if(dataArray.front()=="None")
        {
            dataArray.erase(dataArray.begin());
            return NULL;
        }
        TreeNode* node=new TreeNode(stoi(dataArray.front()));
        dataArray.erase(dataArray.begin());//注意要删除队列首元素
        node->left=deserializeCore(dataArray);
        node->right=deserializeCore(dataArray);
        return node;
    }

    TreeNode* deserialize(string data) 
    {
        list<string> dataArray;
        string str;
        for(auto &ch:data)
        {
            if(ch==',')
            {
                dataArray.push_back(str);
                str.clear();
            }
            else
            {
                str+=ch;
            }
        }

        return deserializeCore(dataArray);

    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值