c++ - 将二叉树保存到文件

标签 c++ c algorithm encoding binary-tree

<分区>

我有一个非平衡(不是二进制搜索)二叉树 需要将其编码(稍后解码)到 txt 文件。 我怎样才能有效地做到这一点?

我找到了这个 link 它谈论类似(相同)的问题,但对我来说很明显

最佳答案

请看this on LeetCode .

我喜欢这个解决方案,因为它相对高效并且生成光输出文件。

假设你有这样一棵树:

    _30_ 
   /    \    
  10    20
 /     /  \ 
50    45  35

此解决方案可让您将其序列化为这样的输出文本文件:

30 10 50 # # # 20 45 # # 35 # #

要做到这一点,只需对树执行简单的预序遍历即可:

void writeBinaryTree(BinaryTree *p, ostream &out) {
  if (!p) {
    out << "# ";
  } else {
    out << p->data << " ";
    writeBinaryTree(p->left, out);
    writeBinaryTree(p->right, out);
  }
}

如您所见,# 符号用于表示空节点。

要将此字符串反序列化为树,您可以使用:

void readBinaryTree(BinaryTree *&p, ifstream &fin) {
  int token;
  bool isNumber;
  if (!readNextToken(token, fin, isNumber)) 
    return;
  if (isNumber) {
    p = new BinaryTree(token);
    readBinaryTree(p->left, fin);
    readBinaryTree(p->right, fin);
  }
}

正如我之前所说,此方法生成二叉树的轻量级表示。

当然它有一个严重的缺点:它需要一个符号来表示空节点。

如果树的节点是可以包含该符号本身的字符串,则可能会导致潜在的问题。

关于c++ - 将二叉树保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20005784/

相关文章:

c++ - 解析 2D QVariantMap

python - SPOJ 在 C 中接受相同的算法,在 Python 中超过时间限制

C在不同gcc环境下编译错误

c - _beginthreadex() 返回有效句柄,并在使用 Codeblocks/Mingw 和 GNU GCC 编译器执行线程时崩溃

c# - 最近的平面到非共面点?

algorithm - 寻找有效的算法(非平凡的)

c++ - 在 Windows 8 上使用 Media Engine 播放音乐

c++ - 相同输入的 boost sha1 和 openssl 库的不同输出

c++ - 检查网络摄像头摄像头设备 gnome 库

php - 检查一组数字中的数字 n 是否等于其子集的总和