Algorithm 如何证明子节点';堆的s公式:节点i-th有2个子节点是2i-th和2i+;第1名?

Algorithm 如何证明子节点';堆的s公式:节点i-th有2个子节点是2i-th和2i+;第1名?,algorithm,tree,binary-tree,heap,Algorithm,Tree,Binary Tree,Heap,很容易看出公式是正确的,但我不知道如何证明这一点。其他一些树怎么样,比如:每个节点有3个子节点的树,4个子节点的树? 谢谢 它更像是一个定义,而不是一个证明:你这样定义它,然后处理它,同时确保你保持在你定义的不变量的范围内。您可能想证明没有重叠,但这很容易看出 对于3个孩子,我们可以使用3i、3i+1、3i+2: 1 / | \ 2 3 4 -- | \ \ 5 6 7 index:

很容易看出公式是正确的,但我不知道如何证明这一点。其他一些树怎么样,比如:每个节点有3个子节点的树,4个子节点的树?
谢谢

它更像是一个定义,而不是一个证明:你这样定义它,然后处理它,同时确保你保持在你定义的不变量的范围内。您可能想证明没有重叠,但这很容易看出

对于3个孩子,我们可以使用
3i、3i+1、3i+2

          1
        / | \
       2  3  4 --
             | \  \
             5  6  7

index: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
label: - - 2 3 4 - - - - -  -  5  6  7 

但是,正如您所看到的,这会变得相当低效。如果你能负担得起内存的话,它可能比使用指针更快,但否则它就没有多大用处了

您必须证明,如果您按级别顺序遍历一个完整的二叉树,您将始终在
2n
th和
2n+1
th次访问您在
n
th次访问的节点的子节点

我们可以通过归纳法来做到这一点。证明基本情况无关紧要:

   1
 /   \
2     3
现在,我们必须证明,如果对某些
n
是真的,那么对
n+1
也是真的:

如果我们在
2n
2n+1
时间内访问
n
的孩子,则
n+1
的孩子将紧挨着他们,在
2n+2=2(n+1)
2n+3=2(n+1)+1时间内访问

Q.E.D

          .
          .
          .

    n          n+1
  /   \       /   \
2n   2n+1  2n+2   2n+3

图像只是一个示例,
n
n+1
可能位于不同的级别。这没问题。
n
n+1
的子级将始终是邻居,因为执行级别顺序的方式(访问节点并将子级添加到队列中)。

尝试通过归纳证明。。。