4.2練習バランスバイナリツリーのルート(25ポイント)浙江版「データ構造(第2版)」タイトルセット

最初に挿入された一連の数字を考えるとAVL木、あなたの出力値最後の世代のAVL木のルートを空にします。

入力フォーマット:

入力の最初の行は、正の整数で与えられるN(与えラインに続くを≤)、Nに隙間によって分離された異なる整数を、。

出力フォーマット:

行は、最初は空AVLツリーは、ツリーのルートの値に整数の出力順に挿入された後。

サンプル入力1:

5
88 70 61 96 120

出力サンプル1:

70

サンプル入力2:

7
88 70 61 96 120 90 65 

出力サンプル2:

88
調整プロセスAVL木の主なテスト。
コード:
書式#include <stdio.hに> 
する#include <stdlib.h>に含ま
typedefは構造体ノードノード。
構造体ノード{
     int型データ。
    構造体のノード*左、* 右; 
} *ヘッド= NULL; 
ノード *新しい(INT D){ 
    ノード * =ノード(ノード*)はmallocはsizeof (ノード))。
    ノード - >データ= D。
    ノード - >左=ノード- >右= NULL;
    リターン・ノード; 
} 
ノード * LL(ノード* ノード){ 
    ノード L * =ノード- >左; 
    ノード - >左= L - > 右。
    L - >右= ノード。
    リターンリットル。
} 
ノード * RR(ノード* ノード){ 
    ノード * R =ノード- > 右。
    ノード - >右= R - > 左。
    R - >左= ノード。
    戻りR; 
} 
ノード * LR(ノード* ノード){ 
    ノード - >左= RR(ノード- > 左)。
    戻りLL(ノード)。
} 
ノード * RL(ノード* ノード){ 
    ノード - >右= 11(ノード- >右);
    リターンRR(ノード)。
} 
int型の最大値(int型int型b)は{
     返す > bは?:B; 
} 
int型の高さ(ノード* ノード){
     戻りノード== NULL?0:MAX(身長(ノード- >左)、高さ(ノード- >右))+ 1 
} 
ノード *インサート(ノード*ノード、int型のD){
     場合(ノード== NULL){ 
        ノード = 新しい(D)。
    } 
    そう であれば(D <ノード- > データ){ 
        ノード- >左=インサート(ノード- > 左、D)。
    } 
    { 
        ノード - >右=インサート(ノード- > 右、D)。
    } 
    であれば(高さ(ノード- >左) -高さ(ノード- >右)== 2 ){
         場合(D <ノード- >左- > データ){ 
            ノード = LL(ノード)。
        } 
        { 
            ノード = LR(ノード)。
        } 
    } 
    そう であれば(高さ(ノード- >左) -高さ(ノード- >右)== - 2 ){
         場合(D>ノード- >右- > データ){
            ノード = RR(ノード)。
        } 
        { 
            ノード = RL(ノード)。
        } 
    } 
    戻りノード。
} 
int型のmain(){
     int型N、D。
    scanf関数(" %のD "、&N)
    以下のためにINT iが= 0、I <N; I ++ ){ 
        scanf関数(" %のD "、&D)。
        ヘッド = インサート(ヘッド、D)。
    } 
    のprintf(" %dの"、頭- > データ)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/8023spz/p/11875946.html