ソートされた配列をバイナリ検索ツリーに挿入するアルゴリズムを実装したいのですが、片側だけに成長するツリーになってしまいたくありません。
あなたはなにか考えはありますか?
ありがとう。
ソートされた配列をバイナリ検索ツリーに挿入するアルゴリズムを実装したいのですが、片側だけに成長するツリーになってしまいたくありません。
あなたはなにか考えはありますか?
ありがとう。
これにより、バランスの取れたツリーが得られます(O(n)で):
Java ライクなコード:
TreeNode sortedArrayToBST(int arr[], int start, int end) {
if (start > end) return null;
// same as (start+end)/2, avoids overflow.
int mid = start + (end - start) / 2;
TreeNode node = new TreeNode(arr[mid]);
node.left = sortedArrayToBST(arr, start, mid-1);
node.right = sortedArrayToBST(arr, mid+1, end);
return node;
}
TreeNode sortedArrayToBST(int arr[]) {
return sortedArrayToBST(arr, 0, arr.length-1);
}
hereから派生したコード。
次のように、疑似ランダムな順序で挿入します。
#include <stdio.h>
int array[] = {1,2,3,4,5,6,7,8,9,10};
#define COUNT 10
#define STEP 7 /* must be relatively prime wrt COUNT */
#define START 5 /* not important */
int main(void)
{
unsigned idx;
idx=START;
while(1) {
printf("[%u] = %u\n", idx, array[idx] );
// do_insert(array[idx] );
idx = (idx + STEP ) % COUNT;
if (idx == START) break;
}
return 0;
}