並べ替えられた配列を、配列をバイナリ ツリーに入れて BFT を実行した場合に幅優先トラバーサルが与える順序で反復処理したいと考えています (これが現在の方法です)。バイナリ ツリーに配列を再度構築して格納する必要があるため、明らかにこれには追加のメモリ オーバーヘッドが伴います。これは二分探索に似ているはずですが、正しい順序付けができません。
私が現在これを達成する方法は次のとおりです。
BTree bst = sortedArrayToBST(array);
Queue<BTree> queue = new LinkedList<BTree>();
queue.add(bst);
while(!queue.isEmpty()) {
BTree node = queue.remove();
System.out.println(node.data);
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
これが私が現在持っているものです(ただし、これは明らかに間違った順序になります):
public void bstIterate(int[] array, int start, int end) {
if(array.length == 0) return;
int med = array.length /2;
System.out.println(array[med]);
bstIterate(array,start,mid);
bstIterate(array,mid+1,array.length);
}
これは追加のメモリ オーバーヘッドなしで実行できますか、またはアイテムをスタック、ベクトル、またはキューに格納する必要がありますか?もしそうなら、バイナリ ツリーよりも少ないメモリしか必要としませんか?