我试图预测二元树中父母的数量,因为你所知道的就是叶子的数量,以及它是一个平衡的二叉树。
目前,我的代码运行如下:
int width = exits;
int amountOfParents = 0;
do
{
width -= 2;
AmountOfParents++;
} while (width > 0);
代码的基本前提是它将占用所有孩子,并为他们找到父母的数量。迭代地执行此操作,直到到达根目录。但是,当树的高度不均匀时会出现问题。
这个解决方案给出正确数量的父母直到5。当它达到6时,binaray树创建另一个父节点,所以应该有4,但它给3.我知道为什么它给3,但我不知道如何解决它。
编辑:我刚才有了另一个想法。如果我找到最接近的完美平方数完全平衡的树,并且单独找到下落不明的怎么办?现在尝试。
答案 0 :(得分:1)
公式为log2(退出)* 2 + 1
C#:Math.Ceiling(Math.Log(x) / Math.Log(2)) * 2 + 1;
但它必须完全平衡
因为我正在做方数的倒数,所以你对方数的想法是可行的。
答案 1 :(得分:0)
我尝试了几种不同的方法,但这似乎是最好的方法。
你带走所有孩子并将他们分成两组。将这些对放入列表中并再次执行相同的操作。如果有奇数对,只需将他列入列表即可。由于它的性质,他将在以后的迭代中得到处理。