为什么二叉树


10

在我的Java课上,我们正在学习不同类型的集合的复杂性。

很快我们将讨论我一直在阅读的二叉树。该书指出二叉树的最小高度为,但没有提供进一步的解释。log2⁡(n+1)−1

有人可以解释为什么吗?


Answers:


11

一棵二叉树在非叶节点上有1个或2个子节点,在叶节点上有0个节点。假设一棵树中有节点,我们必须以它们仍然形成有效的二叉树的方式进行排列。n

不用证明,我要说的是,要最大化高度,给定节点应该线性排列,即每个非叶节点应该只有一个子节点:

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

这里,根据节点数来计算高度关系的公式是直接的。如果是树的高度,则h = n − 1。hh=n−1

现在,如果我们尝试构建一个具有最小高度(总是可简化为完整的二叉树)的节点的二叉树,那么在进入下一层之前,我们必须在上层打包尽可能多的节点。因此,该树采用以下树的形式:n

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

让我们从一个特殊的情况开始,。n=2m−1

我们知道

20+21+22+...+2m−1=2m−1

同样,很容易证明一个级别最多可以包含2个i节点。i2i

在上述总和使用该结果,我们发现,对于每个电平,从0到米,存在一个对应的术语2 我- 1中的膨胀2 米 - 1。这意味着,一个完整的2 m - 1节点的二叉树被完全填充并具有高度h (2 m - 1 )= m - 1,其中h (n )=具有n个节点的完整二叉树的高度。i0m2i−12m−12m−1h(2m−1)=m−1h(n)=n

使用这个结果,,因为具有2 m − 1个节点的树已完全填充,因此具有(2 m − 1 )+ 1 = 2 m个节点的树必须适应下一级的额外节点米,由1从增加高度米- 1至米。h(2m)=m2m−1(2m−1)+1=2mmm−1m

到现在为止,我们已经证明,ħ (2 米+ 1)= 米+ 1 以及,ħ (2 米+ 1 - 1 )= 米

h(2m)=m,
h(2m+1)=m+1
h(2m+1−1)=m

因此,米≤ ħ (Ñ )< 米+ 1∀n∈Z,2m≤n<2m+1

m≤h(n)<m+1

m≤log2⁡(n)<m+1
m=⌊log2⁡(n)⌋

∀n,n∈[2m,2m+1)

h(n)=m=⌊log2⁡(n)⌋

∀n∈Z

log2⁡(n+1)−1nlog2⁡(n)n


19

n

41+1⋅2+1⋅2⋅2+1⋅2⋅2⋅23

nodes=1+2+22+23+...+2depth=∑k=0depth2k=1−2depth+11−2.

nodes=2depth+1−1,
nodes+1=2depth+1log2⁡(nodes+1)=log2⁡(2depth+1)=depth+1log2⁡(nodes+1)−1=depth.

4

为了使高度保持最小,很容易看出我们需要填充所有级别,除了最后一个级别。为什么?否则,我们可以仅将最后一级的节点上移到上一级的空插槽中。

现在,假设我有一些未指定数量的bean,并且一次给您一个bean,并要求您构造一个最小高度的二叉树。在您完全填满最后一个级别或在最后一个级别中至少有一个bean时,我可能会用完所有的bean。让我们说,您此时的树高为h。

20+21+22+23+⋯+2h=2h+1−1≤n.
h=lg⁡(n+1)−1.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.