【问题标题】:How does a binary tree waste memory when stored as nodes and references?当存储为节点和引用时,二叉树如何浪费内存?
【发布时间】:2019-03-03 05:21:05
【问题描述】:

我正在研究二叉树,遇到了描述存储方法的这一部分。

它指出:

在具有记录和引用的语言中,二叉树通常由一个树节点结构构成,该结构包含一些数据以及对其左孩子和右孩子的引用...

...这种存储二叉树的方法浪费了相当多的内存,因为指针将在一半以上的时间为空(或指向哨兵)...

有人可以证明或进一步解释为什么会发生这种情况吗?

https://en.wikipedia.org/wiki/Binary_tree#Methods_for_storing_binary_trees

【问题讨论】:

    标签: binary-tree binary-search-tree


    【解决方案1】:

    典型的二叉树表示由与节点关联的数据和分别指向左右子树的两个指针组成。

    我认为通过表示很容易实现每个节点都花费两个指针。因此,n 节点的每棵树在存储中总共花费了2 x n 指针(用于指针)。

    现在,除了根,n-1 节点有一个父节点(即弧或边)。因此,您确实使用了您拥有的2nn-1 指针(如上一段所述)。

    也就是说,在总共2n 指针中,您总是使用n-1。剩余的2n - (n-1) = n+1 始终设置为null。因此,无论树形拓扑如何,存储null 指针的空间总是比存储树弧的空间多。

    【讨论】:

      【解决方案2】:

      想象一棵高度为 3 的完整二叉树。它有 7 个节点。其中4人没有孩子。 4/7 > 1/2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-17
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多