具有N个节点的完整二叉树的高度是多少?

时间:2013-07-28 18:43:16

标签: c linked-list height nodes binary-search-tree

具有N个节点的完整二叉树的高度是多少?我正在寻找一个确切的答案,无论是楼层还是天花板价值。

4 个答案:

答案 0 :(得分:13)

这是CEIL(log2(n+1))-1

  • 1个节点给出log2(2)= 1
  • 3个节点给出log2(4)= 2
  • 7个节点给出log2(8)= 3
  • 15个节点给出log2(16)= 4
    ...

编辑:根据维基百科,根节点(相当不直观?)不计入高度,因此公式为CEIL(log2(n+1))-1

答案 1 :(得分:8)

您不必执行CEIL(log2(n + 1)) - 1。

对于COMPLETE二叉树,答案很简单: FLOOR(LOG2(n))的

  • 1个节点给出0
  • 2个节点给出1
  • 3个节点给出1
  • 4个节点给出2
  • 5个节点给出2
  • 6个节点给出2
  • 7个节点给出2
  • 8个节点给出3
  • ...
  • 15个节点给出3
  • 16个节点给出了4个
  • ...

答案 2 :(得分:1)

我猜你可以使用Joachim提供的公式或只是做楼层日志(h)......这是你可以为任何二叉树做的最好的情况......因此,如果你的树例如已满,你就不会能够说这一定是真的......还记得在CS中你遇到的几乎每个日志都是基数2

答案 3 :(得分:0)

N是节点数,h是完整二叉树的高度:
    2 ** h <= N <2 **(h + 1)
=> h <= ln2(N) => h =楼板面积(ln2(N))

第一个不等式表示一个事实,即高度为h的完整二叉树的节点数大于高度为(h-1)的完整二叉树的节点数,而同时小于h的完整二叉树的节点数。一棵高度为h加上1的完整树。这是数学公式:
N_FULL_TREE(h-1)= 1 + 2 + 4 + ... + 2 **(h-1)= 2 ** h-1
N_FULL_TREE(h)= 1 + 2 + 4 + ... + 2 ** h = 2 **(h + 1)-1
=> N_FULL_TREE(h-1) => N_FULL_TREE(h-1)+ 1 <= N_COMPLETE_TREE(h) => 2 ** h-1 +1 <= N(h)<2 **(h +1)-1 +1
=> 2 ** h <= N <2 **(h + 1)