活跃农民
- 积分
- 431
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-7-28
- 最后登录
- 1970-1-1
|
serialize & deserialize binary binary tree 可以记low_bound 和up_bound, 这样可以省一点空间,不用存 null 节点。 我觉得问BST而不是BT的意图是这个?
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- struct TreeNode{
- int val;
- TreeNode *left, *right;
- TreeNode(int val_) {
- val = val_;
- left = right = nullptr;
- }
- };
- void serial(TreeNode* root, vector<int>& ans) {
- if(!root) return;
- ans.push_back(root->val);
- serial(root->left, ans);
- serial(root->right, ans);
- }
- vector<int> serialize(TreeNode* root){
- vector<int> ans;
- serial(root, ans);
- return ans;
- }
- TreeNode* deserial(vector<int>& nums, int& pos, int lb, int ub) {
- if(pos == nums.size() || nums[pos] < lb || nums[pos] > ub) return nullptr;
- int val = nums[pos++];
- TreeNode* node = new TreeNode(val);
- node->left = deserial(nums, pos, lb, val-1);
- node->right = deserial(nums, pos, val+1, ub);
- return node;
- }
- TreeNode* deserialize(vector<int>& nums) {
- int pos = 0;
- return deserial(nums, pos, INT_MIN, INT_MAX);
- }
- int main(int argc, const char * argv[]) {
- // insert code here...
- /* 2
- / \
- 0 5
- \ / \
- 1 4 6
- / / \
- 3 7 8
- */
- TreeNode n0(0), n1(1), n2(2), n3(3), n4(4), n5(5), n6(6), n7(7), n8(8);
- n2.left = &n0;
- n2.right = &n5;
- n0.right = &n1;
- n5.left = &n4;
- n5.right = &n6;
- n4.left = &n3;
- n6.left = &n7;
- n6.right = &n8;
- auto ans = serialize(&n2);
- auto root = deserialize(ans);
- queue<TreeNode*> q;
- q.push(root);
- while(!q.empty()) {
- int qsize = q.size();
- while(qsize-- > 0) {
- auto top = q.front();
- q.pop();
- cout << top->val << " ";
- if(top->left) q.push(top->left);
- if(top->right) q.push(top->right);
- }
- cout << endl;
- }
- return 0;
- }
复制代码 |
|