序列化

作者: 小雨启明 | 来源:发表于2018-09-12 21:29 被阅读0次
    思路:

    1、d对于经常调用string 与 int之间转换的代码 一定要建立函数 美观 好使;
    2、 先序遍历,保存格式为: 数字+“ ” 空节点为 “# ”
    3、 将string处理为queue 方便处理节点后直接弹出
    4、遍历queue中的节点,遍历到时弹出,为“#”返回空,否则按先序遍历的方式递归遍历

    /**
     * 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.
         */
        int strtoint(string &svalue){
            stringstream ss;
            ss << svalue;
            int ivalue;
            ss >> ivalue;
            return ivalue;
        }
        
        string inttostr(int &ivalue){
            stringstream ss;
            ss << ivalue;
            string svalue;
            ss >> svalue;
            return svalue;
        }
        
        string serialize(TreeNode * root) {
            if(root == NULL)    //基本情况 而且处理了头结点为空的问题 很6
                return "# ";
            
            string svalue = inttostr(root->val);
            string res = svalue+" ";
            
            res += serialize(root->left);
            res += serialize(root->right);
            return res;
        }
    
        TreeNode * deserialize(string &data) {
            // write your code here
            queue<string> p;
            stringstream input(data);
            string temp;
            while(input >> temp){
                p.push(temp);
                temp.clear();
            }
            return deserializehelp(p);
        }
        TreeNode* deserializehelp(queue<string> &p){
            string svalue = p.front();
            p.pop();
            if(svalue == "#"){
                return NULL;
            }
            int ivalue = strtoint(svalue);
            
            TreeNode* root = new TreeNode(ivalue);
            root->left = deserializehelp(p);
            root->right = deserializehelp(p);
            return root;
        }
    };
    

    刷题:https://www.lintcode.com/problem/serialize-and-deserialize-binary-tree/

    相关文章

      网友评论

          本文标题:序列化

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