
1. 想法
二叉树的序列化: 层序遍历,借助队列保存需要访问的节点信息。
反序列化: 根据序列化的结果依次处理序列化的字符串
2. C++实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#include <sstream> #include <deque> #include <string> struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; using namespace std; class Solution { public: string serialize(TreeNode* root) { ostringstream os; deque<TreeNode*> deq; string res = ""; if (!root) return res; deq.push_back(root); while (!deq.empty()) { TreeNode* tmp = deq.front(); if (tmp) { os << tmp->val << " "; deq.push_back(tmp->left); deq.push_back(tmp->right); } else { os << "# "; } deq.pop_front(); } return os.str(); } TreeNode* deserialize(string data) { if (!data.size()) return nullptr; istringstream is(data); deque<TreeNode*> deq; string val; is >> val; TreeNode* root = new TreeNode(stoi(val)); TreeNode* cur = root; deq.push_back(root); while (!deq.empty()) { TreeNode* node = deq.front(); deq.pop_front(); is >> val; if (val != "#") { cur = new TreeNode(stoi(val)); node->left = cur; deq.push_back(cur); } is >> val; if (val != "#") { cur = new TreeNode(stoi(val)); node->right = cur; deq.push_back(cur); } } return root; } };
|
近期评论