您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将二叉树保存到文件中

将二叉树保存到文件中

在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);
  }
}

就像我之前说的那样,此方法产生了二进制树的轻量表示形式。

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

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

其他 2022/1/1 18:21:40 有565人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶