zoukankan      html  css  js  c++  java
  • 剑指Offer——序列化二叉树

    题目描述:

    请实现两个函数,分别用来序列化和反序列化二叉树


    分析:

     先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL。

     反序列化便很简单,遇到“0xFFFFFFFF”就返回NULL,其他时候就直接产生一个结点。


    代码:

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13     vector<int> buf;
    14     void dfs1(TreeNode *root) {
    15         if(!root) buf.push_back(0xFFFFFFFF);
    16         else {
    17             buf.push_back(root->val);
    18             dfs1(root->left);
    19             dfs1(root->right);
    20         }
    21     }
    22     TreeNode* dfs2(int* &p) {
    23         if(*p == 0xFFFFFFFF) {
    24             p++;
    25             return NULL;
    26         }
    27         TreeNode* res = new TreeNode(*p);
    28         p++;
    29         res->left = dfs2(p);
    30         res->right = dfs2(p);
    31         return res;
    32     }
    33     char* Serialize(TreeNode *root) {
    34         buf.clear();
    35         dfs1(root);
    36         int bufSize = buf.size();
    37         int *res = new int[bufSize];
    38         for(int i = 0; i < bufSize; i++) res[i] = buf[i];
    39         return (char*)res;
    40     }
    41     TreeNode* Deserialize(char *str) {
    42         int *p = (int*)str;
    43         return dfs2(p);
    44     }
    45 };
  • 相关阅读:
    redis内存模型、内存使用的优化
    【转】[Andriod]Xposed和VirtualXposed
    https详解
    http详解
    补码
    浮点数的二进制表示
    Go随机数
    ECDSA--圆锥曲线数字签名算法原理(摘wikepedia)
    Linux命令备忘
    【Windows】系统命令
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747806.html
Copyright © 2011-2022 走看看