为什么线段树需要是满二叉树?
Why segment tree needs to be a full binary tree?
构造线段树时,为什么要是满二叉树?我采用了一些示例输入数组,当使它们完成二叉树时,我在范围结果中得到了相同的最小值。那么当完整的二叉树也给出相同的结果时,为什么要把它变成一个完整的二叉树。
输入数组 - 1, 3, 5, 7, 9, 11
线段树的数组表示例如数组 1、3、5、7、9、11 可以这样存储(假设范围查询正在寻找最小元素)
对不起,懒惰的图表。
树节点的数量计算为 pow*2-1 其中 pow = 大于或等于 n 的最小 2 次幂。
显然上面的线段树表示是满二叉树而不是完全二叉树。
你能分享你的线段树数组表示吗?你如何将它存储为完整的二叉树?
线段树不是完全二叉树。对于完整的二叉树,除了最后一层之外的所有级别都需要完全填充。另外,对于最后一层,节点应该尽可能地靠左。
考虑到您的输入数组有 6 个元素,树将如下所示(假设有 1-6 个索引):-
很明显,最后一层有叶节点 1 和 2,后面跟着缺失的节点,它们可能是节点 3 的子节点(假设),然后是叶节点 4 和 5。这一层有缺失的节点,节点 4 和 5 不是尽可能左。
然而,每个节点都有 0 个或 2 个子节点,使其成为完整的二叉树。
构造线段树时,为什么要是满二叉树?我采用了一些示例输入数组,当使它们完成二叉树时,我在范围结果中得到了相同的最小值。那么当完整的二叉树也给出相同的结果时,为什么要把它变成一个完整的二叉树。 输入数组 - 1, 3, 5, 7, 9, 11
线段树的数组表示例如数组 1、3、5、7、9、11 可以这样存储(假设范围查询正在寻找最小元素)
对不起,懒惰的图表。
树节点的数量计算为 pow*2-1 其中 pow = 大于或等于 n 的最小 2 次幂。
显然上面的线段树表示是满二叉树而不是完全二叉树。
你能分享你的线段树数组表示吗?你如何将它存储为完整的二叉树?
线段树不是完全二叉树。对于完整的二叉树,除了最后一层之外的所有级别都需要完全填充。另外,对于最后一层,节点应该尽可能地靠左。
考虑到您的输入数组有 6 个元素,树将如下所示(假设有 1-6 个索引):-
很明显,最后一层有叶节点 1 和 2,后面跟着缺失的节点,它们可能是节点 3 的子节点(假设),然后是叶节点 4 和 5。这一层有缺失的节点,节点 4 和 5 不是尽可能左。 然而,每个节点都有 0 个或 2 个子节点,使其成为完整的二叉树。