中文网站站内优化怎么做,建站系统cms,东莞58同城网,网站做快照题目分析
题目链接#xff1a;449. 序列化和反序列化二叉搜索树
觉得序列化很简单#xff0c;前序遍历、后序遍历、中序遍历、层序遍历等等。其中得到前序遍历和后序遍历是可以通过递归解法反序列化的#xff0c;觉得这样子做有点复杂。就想着可不可以一次遍历。一次遍历的…题目分析
题目链接449. 序列化和反序列化二叉搜索树
觉得序列化很简单前序遍历、后序遍历、中序遍历、层序遍历等等。其中得到前序遍历和后序遍历是可以通过递归解法反序列化的觉得这样子做有点复杂。就想着可不可以一次遍历。一次遍历的问题在于不知道哪里子孩子为空因为没有保存子孩子为空的情况。所以我就针对性地让空节点的值为-1。为了方便从字符串中读取数字使用了C中的istringstream。整体的实现还是比较简洁高效的。
实现代码
class Codec {
public:// Encodes a tree to a single string.string serialize(TreeNode* root) {queueTreeNode* q;string ans;if (root nullptr) return ans;q.push(root);int cnt;TreeNode *t;while (!q.empty()) {cnt q.size();while (cnt--) {t q.front(); q.pop();if (t) {ans.append(std::to_string(t-val));q.push(t-left);q.push(t-right);} else {ans.append(-1);}ans.push_back( );}}return ans;}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {std::istringstream is(data);int x, y, cnt;TreeNode *root nullptr, *t;queueTreeNode* q;if (is x) {root new TreeNode(x);q.push(root);while (!q.empty()) {cnt q.size();while (cnt--) {t q.front(); q.pop();is x y;if (x ! -1) {t-left new TreeNode(x);q.push(t-left);}if (y ! -1) {t-right new TreeNode(y);q.push(t-right);}}}}return root;}
};反思总结
写完后去看了一眼题解才发现是二叉搜索树。。。我眼睛是有多瞎。不过二叉搜索树也没有什么特别好的优化。
如果用的是中序和前序还原的话由于二叉搜索树中序遍历是有序的性质不用去特意保存中序遍历。