序列化二叉树

作者: cherryleechen | 来源:发表于2019-05-07 13:19 被阅读0次

    时间限制:1秒 空间限制:32768K

    题目描述

    请实现两个函数,分别用来序列化和反序列化二叉树。

    我的代码

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        char* Serialize(TreeNode *root) {    
            /*将一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,
            从而使得内存中建立起来的二叉树可以持久保存。*/
            vector<int> buf;
            preorder(root,buf);
            int* res=new int[buf.size()];
            for(int i=0;i<buf.size();i++)
                res[i]=buf[i];
            return (char*)res;
        }
        TreeNode* Deserialize(char *str) {
            /*根据某种遍历方式得到的序列化字符串结果来重构二叉树。*/
            int* p=(int*) str;
            return reverse_preorder(p);
        }
        void preorder(TreeNode* root,vector<int> &buf){
            if(root==nullptr)
                buf.push_back(0xffffffff);
            else{
                buf.push_back(root->val);
                preorder(root->left,buf);
                preorder(root->right,buf);
            }
        }
        TreeNode* reverse_preorder(int* &p){
            if(*p==0xffffffff){
                p++;
                return nullptr;
            }
            TreeNode* res=new TreeNode(*p);
            p++;
            res->left=reverse_preorder(p);
            res->right=reverse_preorder(p);
            return res;
        }
    };
    

    运行时间:4ms
    占用内存:456k

    相关文章

      网友评论

        本文标题:序列化二叉树

        本文链接:https://www.haomeiwen.com/subject/fkmkoqtx.html