序列化二叉树

来源:互联网 发布:网站幻灯片js代码 编辑:程序博客网 时间:2024/06/08 01:05

题目:

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

牛客网上通过的代码:

class Solution {private:    TreeNode* decode(char *&str) {        if(*str=='#'){            str++;            return NULL;        }        int num = 0;        while(*str != ',')            num = num*10 + (*(str++)-'0');        str++;        TreeNode *root = new TreeNode(num);        root->left = decode(str);        root->right = decode(str);        return root;    }public:    char* Serialize(TreeNode *root) {           if(!root) return "#";        string r = to_string(root->val);        r.push_back(',');        char *left = Serialize(root->left);        char *right = Serialize(root->right);        char *ret = new char[strlen(left) + strlen(right) + r.size()];        strcpy(ret, r.c_str());        strcat(ret, left);        strcat(ret, right);        return ret;    }    TreeNode* Deserialize(char *str) {        return decode(str);    }};

《剑指offer》上的代码,更容易理解:

void Serialize( BinaryTreeNode* pRoot, ostream& stream ){    if ( pRoot == NULL )    {        stream << "$,";        return ;    }    stream << pRoot->m_nvalue << ',';    Serialize( pRoot->m_pLeft, stream );    Serialize( pRoot->m_pRight, stream );}void Deserialize( BinaryTreeNode** pRoot, istream& stream ){    int number;    if ( ReadStream( stream, &number ) )    {        *pRoot = new BinaryTreeNode();        (*pRoot)->m_nvalue = number;        (*pRoot)->m_pLeft = NULL;        (*pRoot)->m_pRight = NULL;        Deserialize( &((*pRoot)->m_pLeft), stream );        Deserialize( &((*pRoot)->m_pRight), stream );    }}