栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

二叉树的高效阵列存储

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的高效阵列存储

我喜欢的一种方法是存储预遍历遍历,但还可以在其中包含“空”节点。存储“空”节点消除了对也存储树的顺序的需求。

这种方法的一些优点

  • 在大多数实际情况下,与前/后+顺序方法相比,您可以做得更好。
  • 序列化只需要一个遍历
  • 反序列化可以一次完成。
  • 可以遍历顺序遍历而无需构造树,如果情况需要,则可能很有用。

例如,假设您有一个由64位整数组成的二进制树,则可以在每个节点之后存储一个额外的位,以表明下一个节点是否为空节点(第一个节点始终是根节点)。空节点,可以用一个位表示。

因此,如果有n个节点,则空间使用量将是8n字节+ n-1个指示符位+空节点的n + 1位= 66 * n位。

在pre / post +顺序中,您将最终使用16n字节= 128 * n位。

因此,您可以在此pre / post +顺序方法中节省62 * n位的空间。

考虑树

       100      /        /         /          10       200  /        /   .   .     150  300          /     /          .   .   .  .

哪里是“。” 是空节点。

您将序列化为

100 10 . . 200 150 . . 300 . .

现在,每个(包括子树)“空前序遍历”具有以下属性:空节点数=节点数+ 1。

由于第一个节点是树的根,因此您可以一次性创建序列化版本的树。后面的节点是左边的子树,后面是右边的子树,可以这样看:

100 (10 . .) (200 (150 . .) (300 . .))

要创建有序遍历,请使用堆栈并在看到节点时推送,并在看到null时弹出(跳至列表)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号