zoukankan      html  css  js  c++  java
  • 序列化二叉树

    原文地址:https://www.jianshu.com/p/472111024c5b

    时间限制: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

  • 相关阅读:
    Bootstrap-table一个表格组件神器(学习二)实战
    JS基础_for循环练习3
    JS基础_for循环练习2
    JS基础_for循环练习1
    JS基础_for循环
    JS基础_while的练习2
    JS基础_while的练习1
    JS基础_while循环
    JS基础_条件分支语句:switch语句
    JS基础_if注意问题
  • 原文地址:https://www.cnblogs.com/cherrychenlee/p/10824854.html
Copyright © 2011-2022 走看看