lintcode binary-tree-serialization 二叉树的序列化与反序列化

来源:互联网 发布:sql server在哪下载 编辑:程序博客网 时间:2024/05/01 07:09

问题描述

lintcode

参考

Serialization/Deserialization of a Binary Tree
LintCode Binary Tree Serialization

笔记

可以用先序遍历使用"#"来表示NULL的方法来序列化,最后也用先序遍历来反序列化。

代码

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {public:    /**     * This method will be invoked first, you should design your own algorithm      * to serialize a binary tree which denote by a root node to a string which     * can be easily deserialized by your own "deserialize" method later.     */    string serialize(TreeNode *root) {        // write your code here        string s = "";        writeTree(s, root);        return s;    }    void writeTree(string &s, TreeNode* root)    {        if (root == NULL)        {            s += "# ";            return;        }        s += (to_string(root->val) + ' ');        writeTree(s, root->left);        writeTree(s, root->right);    }    /**     * This method will be invoked second, the argument data is what exactly     * you serialized at method "serialize", that means the data is not given by     * system, it's given by your own serialize method. So the format of data is     * designed by yourself, and deserialize it here as you serialize it in      * "serialize" method.     */    TreeNode *deserialize(string data) {        // write your code here        int pos = 0;        return readTree(data, pos);    }    TreeNode* readTree(string data, int& pos)    {        if (data[pos] == '#')        {            pos += 2;            return NULL;        }        int nownum = 0;        while (data[pos] != ' ')        {            nownum = nownum * 10 + (data[pos] - '0');            pos++;        }        pos++;        TreeNode* nowNode = new TreeNode(nownum);        nowNode->left = readTree(data, pos);        nowNode->right = readTree(data, pos);        return nowNode;    }};
0 0
原创粉丝点击