首页 > 代码库 > 【LeetCode】297. Serialize and Deserialize Binary Tree
【LeetCode】297. Serialize and Deserialize Binary Tree
二叉树的序列化与反序列化。
如果使用string作为媒介来存储,传递序列化结果的话,会给反序列话带来很多不方便。
这里学会了使用 sstream 中的 输入流‘istringstream‘ 和 输出流‘ostringstream‘.
istringstream in;
in >> str;
这里没执行一次就会倒出一个string (因为in流中使用了‘ ‘空格 作为分割符, 所以可以分成很多个string)
建树的时候使用先序建立二叉树。
关键代码如下:
TreeNode* build(istringstream in){ if(#) return null; else{ new a node newnode -> left = build(in) newnode -> right = build(in) } }
/** * 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) { ostringstream out; backtrack(root, out); return out.str(); } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { istringstream in(data); return build(in); } private: void backtrack(TreeNode *rt, ostringstream &out){ if(rt){ out << rt -> val << " "; backtrack(rt -> left, out); backtrack(rt -> right, out); }else{ out << "#"<<" "; } } // 形如: 1 # 2 其中树节点必为满树空节点用#表示。中间用空格分割。 TreeNode* build(istringstream &in){ string str = ""; in >> str; if(str == "#" || str == ""){ return NULL; }else{ TreeNode *rt = new TreeNode(atoi(str.c_str())); rt -> left = build(in); rt -> right = build(in); return rt; } } }; // Your Codec object will be instantiated and called as such: // Codec codec; // codec.deserialize(codec.serialize(root));
【LeetCode】297. Serialize and Deserialize Binary Tree
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。