Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么段树需要是一个完整的二叉树?_Algorithm_Data Structures_Binary Tree_Segment Tree - Fatal编程技术网

Algorithm 为什么段树需要是一个完整的二叉树?

Algorithm 为什么段树需要是一个完整的二叉树?,algorithm,data-structures,binary-tree,segment-tree,Algorithm,Data Structures,Binary Tree,Segment Tree,在构造段树时,为什么它需要是一个完整的二叉树?我举了一些输入数组的例子,当把它们做成二叉树时,我得到的是相同的最小值。那么,既然完全二叉树也给出了相同的结果,为什么还要把它变成完全二叉树呢。 输入数组-1,3,5,7,9,11段树的数组表示形式,例如数组1,3,5,7,9,11,可以像这样存储(假设范围查询正在查找最小元素) 对不起,这是一个懒惰的图表 树节点的数量计算为pow*2-1,其中pow=大于或等于n的2的最小幂 显然,上面的段树表示是一个完整的二叉树,而不是一个完整的二叉树 您可以

在构造段树时,为什么它需要是一个完整的二叉树?我举了一些输入数组的例子,当把它们做成二叉树时,我得到的是相同的最小值。那么,既然完全二叉树也给出了相同的结果,为什么还要把它变成完全二叉树呢。
输入数组-1,3,5,7,9,11

段树的数组表示形式,例如数组1,3,5,7,9,11,可以像这样存储(假设范围查询正在查找最小元素)

对不起,这是一个懒惰的图表

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

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


您可以分享您的段树数组表示形式吗?您如何将其存储为一个完整的二叉树?

段树的数组表示形式,例如数组1、3、5、7、9、11,可以像这样存储(假设范围查询正在查找最小元素)

对不起,这是一个懒惰的图表

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

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

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


段树不是完整的二叉树。要使二叉树完整,除最后一个之外的所有级别都需要完全填充。此外,对于最后一级,节点应尽可能左移。 考虑到具有6个元素的输入数组,树将如下所示(假设1-6个索引):-

显然,最后一级有叶节点1和2,后面是缺失的节点,可能是节点3(假设)的子节点,然后是叶节点4和5。此级别缺少节点,节点4和5没有尽可能左移。 然而,每个节点都有0或2个子节点,使其成为完整的二叉树。


段树不是完整的二叉树。要使二叉树完整,除最后一个之外的所有级别都需要完全填充。此外,对于最后一级,节点应尽可能左移。 考虑到具有6个元素的输入数组,树将如下所示(假设1-6个索引):-

显然,最后一级有叶节点1和2,后面是缺失的节点,可能是节点3(假设)的子节点,然后是叶节点4和5。此级别缺少节点,节点4和5没有尽可能左移。
然而,每个节点都有0或2个子节点,使其成为一个完整的二叉树。

(注意(基本上)段树的不同定义:最好呈现您正在使用的一个(使用(可能相互矛盾的)引用)。(注意(基本上)段树的不同定义:最好呈现您正在使用的一个(使用)(可能相互矛盾的)参考)完全二进制是完全二进制tree@user5965026,不,不总是必要的。有一些完整的二叉树是不完整的。@E.Shcherbo我认为在不同的资源中有一些不一致的定义。我一直认为完整的二叉树是一棵每一级都被完全填充的树,这意味着它是一棵完整的二叉树e也是,但是有一些关于完全二叉树的定义,其中每个节点只有2个子节点,除了叶子,它不一定是一个完整的二叉树。@roulette01我同意不一致性。我知道你所说的是一个完美的二叉树@e.Shcherbo实际上,我想我可能记错了。我墨水我有“满”和“完美”二叉树很混乱。尽管如此,我仍然觉得记住所有不同的树名有点混乱,特别是当资源之间没有统一的名称时。完整的二叉树就是完整的二叉树tree@user5965026,不,不总是必要的。有一些完整的二叉树是不完整的。@E.Shcherbo我想有一些不一致的地方我一直把完整的二叉树理解为一棵每一层都被完全填充的树,这意味着它也是一棵完整的二叉树,但是有一些完整的二叉树的定义,其中每个节点只有两个子节点,除了叶子,它不一定是一棵完整的二叉树ry树。@roulette01我同意不一致性。我知道你说的是一棵完美的二叉树@E.Shcherbo实际上,我想我可能记错了。我想我得到了“满”和“完美”二叉树很混乱。尽管如此,我仍然觉得记住树的所有不同名称有点混乱,特别是当资源之间没有统一的名称时。