簡體   English   中英

編碼二叉搜索樹

[英]coding a binary search tree

根據我的編碼類,左孩子是2 * i ,右孩子是2 * i + 1

考慮到這一點,我編寫了以下代碼:

void max_heap( int key ){
    int leftkey = ( 2 * key ) + 1;
    int rigtkey = ( 2 * key ) + 2;
    printf( "key is: %d left child index is: %d right child index is: %d \n",
        key, leftkey, rigtkey );
    printf( "value at key is: %d left child is: %d right child is: %d \n",
        heap[key], heap[leftkey], heap[rigtkey] );

    if ( key >= 0 ){ // My base case?
        if ( leftkey < size && leftkey != size ){
            //Makes sure I don't go out of bounds

            if ( heap[leftkey] > heap[key] ){
                swap( &heap[leftkey], &heap[key] );

            }
        }
        else if ( rigtkey < size && rigtkey != size ){
            // Makes sure I don't go out of bounds

            if ( heap[rigtkey] > heap[key] ){
                swap( &heap[rigtkey], &heap[key] );

            }
        }
        max_heap( key-- );

    }
}

我用max_heap(size/2)調用該方法,其中size是數組中的條目數。

當我運行程序並輸入:

1 2 3 4 5 6

結果是:

key is: 3 left child index is: 7 right child index is: 8 
value at key is: 4 left child is: 0 right child is: 0 

key is: 3 left child index is: 7 right child index is: 8 
value at key is: 4 left child is: 0 right child is: 0 

key is: 3 left child index is: 7 right child index is: 8 
value at key is: 4 left child is: 0 right child is: 0 

key is: 3 left child index is: 7 right child index is: 8 
value at key is: 4 left child is: 0 right child is: 0 

...

它像這樣永遠循環,永遠不會進行交換。

問題在於您如何遞歸。 您將使用max_heap(key--); 這實際上意味着“先調用max_heap(key);然后設置key = key - 1; ”。 這給您一個無休止的循環,因為對函數的每次調用都是使用最初提供的相同鍵進行的。 如果先遞減( max_heap(--key); ),將會得到更好的結果。

話雖如此,這不是遞歸解決的好問題。 一會兒循環會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM