van Emde Boas ツリーを実装していますが、コンストラクターで再帰を使用すると非常に便利な状況に遭遇しました。
ツリーにルート ノードを作成すると、そのノードは他の多くのノードへのポインタを持ち、それらのノードは他の多くのノードを指すようになります。これらが null データで初期化されていても、すべてそこにある必要があります。
編集:コメントへの回答として、メモリを割り当てるときは常に注意する必要があるため、悪い習慣かもしれないと思いました。この場合、ユーザーはそのような新しいノードを割り当てることによる影響を認識していない可能性があるため、意図したよりも多くのメモリを割り当てる可能性がありますか? それ以外は、コンストラクターでメモリを割り当てるのは奇妙/危険に思えたと思います。
このコードは、完全なツリーが作成されるまで、新しいノードを再帰的に作成します。これは悪い習慣ですか?もしそうなら、Javaでそれを行うより良い方法はありますか?
//Constructor
public VEBNode(int universeSize)
{
this.universeSize = universeSize;
min = vEBTree.NULL;
max = vEBTree.NULL;
if(universeSize <= 2)
{
summary = null;
cluster = null;
}
else
{
int childUnivereSize = (int)Math.sqrt(universeSize);
summary = new VEBNode(childUnivereSize);
cluster = new VEBNode[childUnivereSize];
for(int i = 0; i < childUnivereSize; i++)
{
cluster[i] = new VEBNode(childUnivereSize);
}
}
}