[英]What is the number of nodes at a particular level in a balanced binary search tree?
[英]Number of nodes in the bottom level of a balanced binary tree
我想知道在研究二叉搜索树时出现的两个问题。 它们如下:
具有 n 个节点的平衡二叉搜索树的最底层节点的最大数量是多少?
具有 n 个节点的平衡二叉搜索树的最低层节点数是多少?
我在教科书中找不到任何关于此的公式。 有什么办法可以回答这些问题吗? 请让我知道。
假设它是一棵完整的二叉树,叶子中的节点数将始终等于(n/2)+1
。
对于最小节点数,节点总数可以为1
(满足应该是平衡树的条件)。
使用符号:
H
= 平衡二叉树高度L
= 高度为H
的完整二叉树的叶子总数N
= 高度为H
的完整二叉树中的节点总数如下所示,该关系为L = (N + 1) / 2
。 这将是给定树高H
的最大叶节点数。 给定高度的最小节点数是1
(不能为零,因为这样树的高度会减一)。
绘制高度增加的树,可以观察到:
H = 1, L = 1, N = 1
H = 2, L = 2, N = 3
H = 3, L = 4, N = 7
H = 4, L = 8, N = 15
...
树高 ( H
) 与叶子总数 ( L
) 和节点总数 ( N
) 之间的关系变得明显:
L = 2^(H-1)
N = (2^H) - 1
使用数学归纳法很容易证明正确性。
上面的例子表明,对于小H
是正确的。 只需输入H
的值(例如H=1
)并计算L
和N
。 假设公式对某些H
,可以证明它们对HH=H+1
也成立:
对于L
,假设L=2^(H-1)
为真。 由于每个节点有两个子节点,将高度增加 1 将用两个新叶子替换每个叶子节点,从而有效地将叶子总数加倍。 因此,在HH=H+1
情况下,叶子的总数( LL
)将加倍:
LL = L * 2
= 2^(H-1) * 2
= 2^(H)
= 2^(HH-1)
对于N
,假设N=(2^H)-1
为真。 将高度增加 1 ( HH=H+1
) 使节点总数增加了添加的叶节点总数。 因此,
NN = N + LL
= (2^H) - 1 + 2^(HH-1)
= 2^(HH-1) - 1 + 2^(HH-1)
= 2 * 2^(HH-1) - 1
= (2^HH) - 1
应用数学归纳法,证明其正确性。
H
可以用N
表示:
N = (2^H) - 1 // +1 to both sides
N + 1 = 2^H // apply log2 monotone function to both sides
log2(N+1) = log2(2^H)
= H * log2(2)
= H
L
和N
之间的直接关系(这是所问问题的答案)是:
L = 2^(H - 1) // replace H = log2(N + 1)
= 2^(log2(N + 1) - 1)
= 2^(log2(N + 1) - log2(2))
= 2^(log2( (N + 1) / 2 ))
= (N + 1) / 2
对于 Big O 分析,常量被丢弃,因此二叉搜索树查找时间复杂度(即H
相对于输入大小N
)为O(log2(N))
。 另外,请记住更改对数底的公式:
log2(N) = log10(N) / log10(2)
并丢弃常数因子1/log10(2)
,其中10
可以有任意对数底,时间复杂度仅为O(log(N))
而不管选择的对数底常数如何。
我从我的教授那里得到了答案。
1)最后一层最大节点数: ⌈n/2⌉
如果有一个有 7 个节点的平衡二叉搜索树,那么答案将是 ⌈7/2⌉ = 4,对于一个有 15 个节点的树,答案将是 ⌈15/2⌉ = 8。 但令人不安的是事实上,只有当平衡树的最后一层从左到右完全填充时,这个公式才会给出正确的答案。 例如,具有 5 个节点的平衡二叉搜索树,上述公式给出的答案为 3,这是不正确的,因为具有 5 个节点的树在最后一级最多可以包含 4 个节点。 所以我猜他的意思是完全平衡的二叉搜索树。
2)最后一层的最小节点数: 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.