[leetcode]二叉树的序列化与反序列化(leetcode标准表达顺序)

   序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

示例: [leetcode]二叉树的序列化与反序列化(leetcode标准表达顺序)_第1张图片

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Codec {
public:

    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        string rst("");
        queueTreeOrder;
        TreeOrder.push(root);
        while(!TreeOrder.empty())
        {
            TreeNode *tmpNode = TreeOrder.front();
            TreeOrder.pop();
            if(!tmpNode) rst += "*#";
            else
            {
                rst += "*"+to_string(tmpNode->val);
                TreeOrder.push(tmpNode->left);
                TreeOrder.push(tmpNode->right);
            }
        }
        cout< TreeNorder;
        for(int i = 0 ; ival = static_cast(data[i+1]-'0');
                TreeNorder.push_back(tmpNode);
            }
            else
            {
                TreeNorder.push_back(nullptr);
            }
        }
        return build_tree(TreeNorder);
    }
    TreeNode* build_tree(vector&Tree)
    {
        int j = 1;
        for(decltype(Tree.size()) i = 0 ; i < Tree.size() ; i++)
        {
            if(Tree.at(i))
            {
                Tree.at(i)->left = Tree.at(j++);
                Tree.at(i)->right = Tree.at(j++);
            }
        }
        return Tree.front();
    }
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

你可能感兴趣的:(c++leetcode练习)