我在这篇HackerEarth的文章中发现,可以使用数组来实现分段树。对于位于数组索引为n的节点的子元素,在索引2n和2n+1的位置上。
此外,文章指出,要将n个元素存储在分段树中,需要2n+1个节点。
然而,最近当我解决与分段树相关的问题时,有时我的代码会出现运行时错误,当我将用于存储分段树的数组大小更改为4 x (要存储在分段树中的数组的大小)时,该错误得到了解决。我如何确保分段树实际上需要4n大小的数组来存储n个元素?
此外,文章指出,要将n个元素存储在分段树中,需要2n+1个节点。
然而,最近当我解决与分段树相关的问题时,有时我的代码会出现运行时错误,当我将用于存储分段树的数组大小更改为4 x (要存储在分段树中的数组的大小)时,该错误得到了解决。我如何确保分段树实际上需要4n大小的数组来存储n个元素?
左子树(N)= 2N; 右子树(N) = 2N+1
这种方式适用于简单的二叉树,但仅当从 N=1 开始时才有效,而不是从 N=0 开始。您可以修正它,使其从 N=0 开始有效,但这需要使用略有不同的公式(LC(N) = 2N+1; RC(N)=2N+2)。我不清楚为什么您需要 2N+1 个节点来存储具有 N 个条目的树;如果您可以分配索引从 1 开始的第一个元素,那么 N 就足够了,如果您分配从 0 开始,但只使用从 1 开始的元素,则需要 N+1。两者都不会膨胀两倍。_ […继续…]_ - Jonathan Leffler