[Leetcode] 297. Serialize and Deserialize Binary Tree 解题报告

xiaoxiao2021-02-28  33

题目:

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

For example, you may serialize the following tree

1 / \ 2 3 / \ 4 5 as  "[1,2,3,null,null,4,5]" , just the same as  how LeetCode OJ serializes a binary tree . You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.

思路:

1)编码过程:采用先序遍历来序列化二叉树,如果结点为空,就用一个特殊字符‘#’来表示;为了便于后续采用istringstream来对字符串进行分割,我们用空格来分割不同数值。这个先序遍历的过程可以采用递归来实现。

2)解码过程:思路和编码过程就刚好是相反的了^_^。

感叹一下:什么时候自己才能把代码写的又高效又精炼呢?每次自己写了之后再参考网上解法,都会发现别人的代码写的比我的少好多行。。。

代码:

/** * 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) { if (!root) { return "#"; } string left = serialize(root->left); string right = serialize(root->right); return to_string(root->val) + " " + left + " " + right; } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { istringstream iss(data); return DFS(iss); } private: TreeNode* DFS(istringstream &iss) { string val; iss >> val; if (val == "#") { return NULL; } TreeNode *root = new TreeNode(stoi(val)); TreeNode *left = DFS(iss), *right = DFS(iss); root->left = left, root->right = right; return root; } }; // Your Codec object will be instantiated and called as such: // Codec codec; // codec.deserialize(codec.serialize(root));

转载请注明原文地址: https://www.6miu.com/read-250166.html

最新回复(0)