如果八叉树等级为0,那么我有8个节点。现在,如果八叉树等级为1,则我有72个节点。但是,如果有(例如)500个节点,如何计算级别?
答案 0 :(得分:0)
要计算级别n
的最大节点数,您将计算:
8**1 + 8**2 + 8**3 ... 8**n
因此,在第2级,它是8 + 64
这可以概括为:
((8 ** (h + 1)) - 1)/7 - 1
在javascript中,您可能会这样写:
function maxNodes(h){
return ((8 ** (h + 1)) - 1)/7 - 1
}
for (let i = 1; i < 4; i++){
console.log(maxNodes(i))
}
要找到逆,您将需要使用对数基数8和一些代数,您将得出一个公式:
floor (log(base-8)(7 * n + 1))
在某些语言(例如python)中,您可以计算math.floor(math.log(7*n + 1, 8))
,但是javascript的日志没有任意基数,因此您需要依赖身份:
Log(base-b)(n) == Log(n)/Log(b)
并计算如下:
function height(n){
return Math.floor(Math.log(7 * n + 1)/Math.log(8))
}
console.log(height(8))
console.log(height(72)) // last on level 2
console.log(height(73)) // first on level 3
console.log(height(584)) // last on level 3
console.log(height(585)) // first on level 4