为什么分段树需要是完整的二叉树?

时间:2017-08-26 03:02:44

标签: algorithm data-structures binary-tree segment-tree

构建分段树时,为什么它需要是完整的二叉树?我拿了一些示例输入数组,当它们完成二进制树时,我在范围结果中获得相同的最小值。那么,当完整的二叉树也给出相同的结果时,为什么要使它成为完整的二叉树。 输入数组-1,3,5,7,9,11

2 个答案:

答案 0 :(得分:1)

例如阵列1,3,5,7,9,11的段树的数组表示可以存储为(假设范围查询找到最小元素)

抱歉懒惰的图表。

enter image description here

树节点的数量计算为pow * 2-1,其中pow = 2的最小幂大于或等于n。

显然,上面的分段树表示是一个完整的二叉树,而不是一个完整的二叉树。

您可以共享您的段树数组表示,如何将其存储为完整的二叉树?

答案 1 :(得分:1)


段树不是完整的二叉树。为了使一棵二叉树完整,除最后一个树外的所有层次都需要完全填充。同样,对于最后一级,节点应尽可能地左。 考虑到您的输入数组有6个元素,树将如下所示(假设1-6个索引):-enter image description here

很显然,最后一级具有叶子节点1和2,其后是(可能是)节点3的子节点的丢失节点,然后是叶子节点4和5。该层具有节点4和5的丢失节点(未剩余)尽可能。 而每个节点都有0个或2个子节点,因此它成为完整的二叉树。