如果我的图形结构如下所示
a level-1
b c level-2
c d e level-3
e f g h level-4
...... level-n
a points to b and c
b points to c and d
c points to d and e
and so on
如何根据图形/树的大小(现有节点数)计算n?
答案 0 :(得分:2)
如果高度为h,则存在的节点数由
给出1 + 2 + 3 + ... + h = h(h + 1)/ 2
这意味着一个简单的选择是获取节点的总数n并进行简单的二进制搜索以找到h的正确值,使得h(h + 1)/ 2 = n。
或者,由于n = h(h + 1)/ 2,您可以注意到
n = h(h + 1)/ 2
2n = h 2 + h
0 = h 2 + h - 2n
现在你有一个二次方程(在h中)你可以解决直接取回h的值。解决方案是
h =( - 1±√(1 + 8n))/ 2
如果你采用负分支,你会得到一个负数,所以你应该采取正分支并计算
( - 1 +√(1 + 8n))/ 2
直接回来h。
希望这有帮助!