博客
关于我
剑指offer Leetcode 37.序列化二叉树
阅读量:313 次
发布时间:2019-03-03

本文共 1996 字,大约阅读时间需要 6 分钟。

序列化和反序列化是将树结构转换为字符串或其他数据结构的过程,常用于数据持久化或传输。以下是优化后的代码和解释:

序列化(Level Order Traversal)

思想:

逐层写入树节点的值,使用队列来维护当前处理的节点层次。每次从队列中取出当前节点,记录其值,然后将左、右子节点加入队列,继续处理。空节点记录为“NULL”。

复杂度:

  • 时间:O(n),遍历每个节点一次。
  • 空间:O(n),用于存储队列中的节点。

代码:

#include 
#include
#include
using namespace std;string serialize(TreeNode* root) { queue
my_queue; my_queue.push(root); string str_tree; while (!my_queue.empty()) { TreeNode* cur = my_queue.front(); my_queue.pop(); if (cur != NULL) { str_tree += to_string(cur->val) + " "; my_queue.push(cur->left); my_queue.push(cur->right); } else { str_tree += "NULL "; } } return str_tree;}

反序列化

思想:

将字符串拆分成单个节点值,并重建树结构。使用流来逐个读取字符,构建节点值列表。然后根据列表顺序重建树,连接左、右子节点。

复杂度:

  • 时间:O(n),处理字符串并构建节点列表。
  • 空间:O(n),用于存储节点值和树结构。

代码:

#include 
#include
#include
#include
using namespace std;TreeNode* deserialize(string data) { if (data.empty()) { return NULL; } istringstream input(data); string str_cur; vector
vec_node; while (input >> str_cur) { if (str_cur == "NULL") { vec_node.push_back(NULL); } else { vec_node.push_back(new TreeNode(stoi(str_cur))); } } for (int i = 0, j = 1; j < vec_node.size(); ++i) { if (vec_node[i] == NULL) { continue; } vec_node[i]->left = vec_node[j++]; if (j < vec_node.size()) { vec_node[i]->right = vec_node[j++]; } } return vec_node[0];}

使用流优化

注意:

  • 使用ostringstreamistringstream来提高效率,避免频繁的字符串拼接。
  • 反序列化时,使用空格分隔单个节点值,确保读取正确。

优化说明

  • 序列化:

    • 使用ostringstream替代string+操作,提升拼接效率。
    • 逐层处理节点,确保树结构层序正确。
  • 反序列化:

    • 使用流处理字符串,提高字符读取效率。
    • 逐个构建节点值列表,确保正确连接左、右子节点。
  • 代码结构:

    • 函数参数和数据结构清晰,易于理解和维护。
    • 适当使用vectorqueue等数据结构,优化空间复杂度。
  • 可逆性:

    • 序列化后的字符串可用于反序列化,确保数据一致性。
    • 处理多余空节点,避免结构错误。
  • 通过以上优化,代码结构清晰,效率提升,适用于大规模数据序列化和反序列化任务。

    转载地址:http://mndq.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现harris算法(附完整源码)
    查看>>
    Objective-C实现haversine distance斜距算法(附完整源码)
    查看>>
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>
    Objective-C实现hornerMethod霍纳法算法(附完整源码)
    查看>>
    Objective-C实现Http Post请求(附完整源码)
    查看>>
    Objective-C实现Http协议下载文件(附完整源码)
    查看>>
    Objective-C实现IIR 滤波器算法(附完整源码)
    查看>>
    Objective-C实现IIR数字滤波器(附完整源码)
    查看>>
    Objective-C实现insertion sort插入排序算法(附完整源码)
    查看>>
    Objective-C实现integer partition整数分区算法(附完整源码)
    查看>>
    Objective-C实现integerPartition整数划分算法(附完整源码)
    查看>>
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>