首页 > 学院 > 开发设计 > 正文

序列化二叉树

2019-11-08 02:06:17
字体:
来源:转载
供稿:网友
题目描述

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

IDEA

序列化指的是将一棵二叉树保存到文件中,反序列化就是从文件中读取二叉树结点值重构原来的二叉树。

先序遍历的代码可以完成序列化二叉树的工作。

1.去掉const属性:const_case<char*> (&num),因为不能把一个const变量直接赋给一个非const变量,必须要转换。

const char m = 't';  const char *cm = &m;  char *n = const_cast<char*>(cm);  

2.const char *c_str()

c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式;

CODE

/*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) {        if (root == NULL)            return NULL;        string str;        Serialize1(root,str);        return const_cast<char*>(str.c_str());    }    void Serialize1(TreeNode *root,string &str)    {        if (root == NULL) {            str+="#,";            return;        }        string tmp=to_string(root->val);        tmp.push_back(',');        str+=tmp;        Serialize1(root->left,str);        Serialize1(root->right,str);    } 	TreeNode* Deserialize(char *str) {        if (str==NULL||*str =='/0') {            return NULL;        }        int i=0;        return deserialize1(str,i);    }	TreeNode *deserialize1(char *str,int &num)    {        if (str[num] =='#') {            num+=2;            return NULL;        }        int val=0;        while (str[num]!= ','&&str[num] != '/0') {            val = val*10+str[num]-'0';            num++;        }        num++;        TreeNode *root=new TreeNode(val);        root->left=deserialize1(str,num);        root->right=deserialize1(str,num);        return root;    }};


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表