我想知道在研究二叉搜索树时出现的两个问题。它们如下:
具有n个节点的平衡二叉搜索树的底层中的最大节点数是多少?
具有n个节点的平衡二叉搜索树的底层中的最小节点数是多少?
我在教科书中找不到任何关于此的公式。有没有办法回答这些问题?请告诉我。
答案 0 :(得分:2)
假设它是完整二叉树,叶子中的节点数总是等于(n/2)+1
。
对于最小节点数,节点总数可以是1
(满足它应该是平衡树的条件)。
答案 1 :(得分:0)
我得到了我教授的答案。
1)最后一级的最大节点数:⌈n/2⌉
如果存在具有7个节点的平衡二叉搜索树,则答案为⌈7/2⌉= 4,对于具有15个节点的树,答案为⌈15/2⌉= 8。 但令人不安的是,只有当平衡树的最后一级从左到右填充完全时,此公式才会给出正确的答案。 例如,具有5个节点的平衡二叉搜索树,上面的公式给出3的答案,这是不正确的,因为具有5个节点的树可以包含最后一级的4个节点的最大节点。 所以我猜他的意思是完全平衡的二叉搜索树。
2)最后一级的最小节点数: 1
答案 2 :(得分:0)
使用符号:
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)
为真。
由于每个节点都有两个子节点,因此高度增加一个
将有效地用两个新叶子替换每个叶子节点
叶片总数加倍。因此,对于HH=H+1
,
树叶总数(LL
将增加一倍:
LL = L * 2
= 2^(H-1) * 2
= 2^(H)
= 2^(HH-1)
对于N
,假设N=(2^H)-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
的{{1}})为N
。另外,请记住更改对数底数的公式:
O(log2(N))
并丢弃常数因数log2(N) = log10(N) / log10(2)
,而不是1/log10(2)
可以具有任意对数底数,而时间复杂度仅为10
,而与选择的对数底数常数无关。
答案 3 :(得分:-1)