【发布时间】:2009-12-23 06:53:34
【问题描述】:
我需要一个通用公式来计算二叉树的最小高度和二叉树的最大高度。 (不是二叉搜索树)
【问题讨论】:
-
你需要更具体。
标签: binary-tree
我需要一个通用公式来计算二叉树的最小高度和二叉树的最大高度。 (不是二叉搜索树)
【问题讨论】:
标签: binary-tree
首先,计算机科学如何计算 树的高度,与离散数学中确定高度的方式 (图论),这可能是由于任一节点存在数据 (或顶点),而在数学中,它是一种纯理论方法。
所以也许你最好弄清楚你需要哪一个。
在离散数学中,树被归类为 m 叉树,所以 二叉树是二叉树。同样在任何给定的高度,可以有 最多 2^h = L(叶子)。这一点很重要,因为它证实了 根的高度为零,因此 2^0 = 1 叶...1 个顶点...根。
所以给定n个顶点,一棵树的高度由公式给出 n = 2^( h + 1 ) - 1
既然要找h,就得取两边的log2 公式 n = 2^( h + 1 ) - 1
对于一个完整的二叉树,最大高度是 log2(n + 1) = log2(2^(h + 1)) 这等于上限( log2( n + 1 ) - 1 ) = h
对于非满二叉树,最大高度 = ( n - 1 ) 因此,如果您有 n 个顶点,则必须减去根才能得到 最大高度,因为上面的公式 (2^h = L)
对于最小高度,根据上述规则推断。
【讨论】:
N - 节点数。
H - 二叉树的高度。
完全二叉树:
然后,与 H 高度 N 将介于:
2^H <= N <= (2^(H+1) - 1)
因此,解决了这个不等式;我们得到:
H <= lg(N) and H >= (lg(N+1) - 1)
因此我们最终得到:
H = floor( lg(N) ) = ceil( (lg(N+1) - 1) ) //as H is integer
(lg : 对数基数 2)
二叉树(不一定完整):
Max height = N;
Min Height = floor( lg(N) ) = ceil( (lg(N+1) - 1) )
当二叉树完成时,我们得到最小高度。
【讨论】:
如果有 N 个元素,二叉树的最小高度将为 log2(N)+1。
对于完整的二叉树,最大高度为 N/2。
对于非满二叉树,最大高度为 N。
【讨论】:
如果一个根可以有任意数量的叶子,最多为 2 (0,1,2),那么:
为了获得最小高度,每个根必须有尽可能多的分支。在这种情况下,您会注意到对于 n=1,height=0 ;对于 n=2 到 n=3,高度=1;对于 n=4 到 n=7,高度=2 ;对于 n=8 到 n=15、高度=3 等。
因此,您可以注意到,对于每个 n,存在一个 p 使得:
2^p
【讨论】:
想想树的结构可以如何改变。
例如,如果树完全不平衡,那么这是最坏的情况——每个节点都只有一个子节点。在最好的情况下,树是完全平衡的,每个节点都有两个孩子。
既然这听起来像是家庭作业,我就把它留在那里。
【讨论】:
最大高度为 n,最小高度(即完美二叉树)为 (log base 2(n + 1)) - 1
【讨论】:
最小高度为 h=ceiling(log(n+1)/log(2) -1) 对于任何二叉树。
【讨论】:
给定 n 个节点:
最小高度:楼层(log2(n)) 假设您有 3 个节点:
root
left/ \right
floor(log2(3)) 将是 floor(1.58) == 1
root
left/ \right
left2/
将是 floor(log2(4)) 将是 floor(2) == 2
最大高度:N-1
根->left1->left2 这里 3 个节点的高度为 2。
【讨论】:
使用n-nodes,可能的最大高度为floor(log(n)) = ceil (log(n+1))-1。
对于n-nodes,可能的最小高度是n-1。
【讨论】: