Arrays 如何计算具有一定高度的二叉搜索树的数组大小?

Arrays 如何计算具有一定高度的二叉搜索树的数组大小?,arrays,height,binary-tree,binary-search-tree,Arrays,Height,Binary Tree,Binary Search Tree,我正在使用数组实现二叉搜索树。我需要为具有特定高度的BST创建一个数组。如何计算该大小?我想,您谈论的是像在二进制堆中一样使用索引的实现 存储在数组中的所有顶点。此数组的第一个元素-根。如果BST的某个顶点是数组的第i个元素,则它的左子元素存储在索引为2*i的单元格中,右子元素存储在索引为2*i+1的单元格中。存储器中这种表示的方案如下所示: 您询问的是给定高度的树的大小。高度-是树中的多个级别。换句话说,高度是从根到任何叶子的路径长度。在上图中,BST的高度为2 如何计算存储固定高度树的数组

我正在使用数组实现二叉搜索树。我需要为具有特定高度的BST创建一个数组。如何计算该大小?

我想,您谈论的是像在二进制堆中一样使用索引的实现

存储在数组中的所有顶点。此数组的第一个元素-根。如果BST的某个顶点是数组的第i个元素,则它的左子元素存储在索引为2*i的单元格中,右子元素存储在索引为2*i+1的单元格中。存储器中这种表示的方案如下所示:

您询问的是给定高度的树的大小。高度-是树中的多个级别。换句话说,高度是从根到任何叶子的路径长度。在上图中,BST的高度为2

如何计算存储固定高度树的数组大小?这只是几何级数的和。高度为0的级别有1个元素,高度为1的下一级别有2个元素,下一级别有4个元素,依此类推。高度为H的标高有2^H个元素

用于存储高度为H的树的数组大小足以存储从0到H的所有级别:
2^0//高度为0的标高的单元格
+
2^1//高度为1的标高的单元格
+…2^H=2^(H+1)-1

重要提示-许多编程语言都有基于零的数组索引。因此,当您像
int-tree[2^(H+1)-1]
这样声明数组时,意味着元素的编号从0到2^(H+1)-2,而您希望它们的编号从1到2^(H+1)-1。索引为0的元素不方便-它违反了“父i,左子2*i”规则,因为0=2*0。换句话说,当我说数组中的第一个元素是根时,我指的是树[1],而不是树[0]。只需忽略树[0]


最后,高度为H的BST所需的数组大小=计算的数组大小+零忽略移位=2^(H+1)-1+1=2^(H+1)

简单的谷歌搜索提供了大量关于关系赌注的资料。BST的高度和节点数。用于实现阵列中BST的Algo甚至代码都很容易获得。请查一下,然后再回来。我们可以讨论一下。如果
i
-节点比
2i+1
2i+2
它的子节点。我想,这是为了避免“0*2=0”问题?这真的没那么重要。对我来说,使用基于1的索引更方便。