为什么二叉树


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 1hh=n1

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

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

让我们从一个特殊的情况开始,n=2m1

我们知道

20+21+22+...+2m1=2m1

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

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

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

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

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

因此,ħ Ñ < + 1nZ,2mn<2m+1

mh(n)<m+1

mlog2(n)<m+1
m=log2(n)

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

h(n)=m=log2(n)

nZ

log2(n+1)1nlog2(n)n


19

n

41+12+122+12223

nodes=1+2+22+23+...+2depth=k=0depth2k=12depth+112.

nodes=2depth+11,
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+11n.
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.