C ++ビルドのバイナリ検索ツリー

バイナリ検索ツリー

データを挿入するときに、バイナリ検索ツリーを参照し、ルートノードを比較し、木の大きさは、順序付けられた位置に検索し、格納されました。

実装

ツリーのルートに比べツリーにデータ、左側に大きな言葉(右側)、右(左)の小さな言葉。

#include <iostreamの> 
する#include <ベクトル> 
 使用して 名前空間STD; 
typedefは構造体STD 
{ 
    INT INUM、
     構造体 STD * 左、
     構造体 STD * 右; 
}ツリー、

ベクトル <ベクトル< INT >> prder; //のレベルを横断します 
 / / 空の木の作成 
ツリーCreateTreeを*(int型iNumroot);
 // 第二に、データの挿入
、ボイド InsertTree(木ヘッド*、int型のn);
 // 第三、ノード削除 
ツリー*削除(木ヘッド*、int型N-)。 
 //第四には、レベルを通過する 
ベクトル<ベクトル< int型 >> Layer_Tree(木* ヘッド);
 無効 layertree(木ヘッド*、int型のn); 
 // IV.2、出力データ
のボイドポイント(); 
 int型のmain()
{ 
    ツリー * ルート;
     INT iNumroot;
     INT INUMBER; 
    
    // 入力根 
    COUT << " 入力根:" << ENDL; 
    CIN >> iNumroot; 
    ルート = CreateTree(iNumroot);
     // 入力データ数 
    COUT << 入力データ番号:"<< ENDL; 
    CIN >> INUMBER; 
    COUT << " 入力データ:" ;
     のためのINT I = 0 ; I <INUMBER; I ++ 
    { 
        int型A; 
        CIN >> A; 
        InsertTree(ルートA); 
    } 
    // 削除ノード 
    COUT << " 削除する入力ノード:" ;
     INT M; 
    CIN >> M; 
    ルート = 削除(ルート、M);
     // レベルの出力データ 
    prder = Layer_Tree(ルート)。
    ポイント(); 
    リターン 0 ; 
    
} 
ツリー * CreateTree(INT iNumroot)
{ 
    ツリー * ヘッド。
    ヘッド = 新しいツリー。 *ヘッド).iNum = iNumroot。
    ヘッド - >左= NULL; 
    ヘッド - >右= NULL;
    返す頭を。
} 
ボイド InsertTree(ツリー*ヘッド、INT N)
{ 
    場合(N>頭部> INUM)
    { 
        場合(頭部> 右)
        { 
            InsertTree(ヘッド- >ツリー。右、N)。
        } 
        
        {  *新しい= 新しいツリー。 *新).iNum = N。 - >左= NULL;  - >右= NULL; 
            ヘッド - >右= 新;
            リターン; 
        } 
    } 
    
    { 
        場合(頭部は> 左)
        { 
            InsertTree(ヘッド - > 左、N)。
        } 
        
        { 
            ツリー *新= 新しいです*新).iNum = N;  - >左= NULL;  - >右= NULL; 
            ヘッド - >左= 新しいです。
            リターン; 
        } 
    } 
} 
ベクトル <ベクトル< int型 >> Layer_Tree(木* ヘッド)
{ 
    場合(ヘッド!)戻りprder。
    layertree(ヘッド、0 ); 
    
    リターンprder。
} 
ツリー *削除(木*ヘッド、int型のn)
{ 
    場合(!ヘッド) 
    {
        はcout << "删除的节点不存在!" << てendl; 
    } 
    であれば(N ==頭部> INUM)
    { 
        場合(頭部が>> &&頭部を左、右)
        { 
            ツリー * CUR =頭部> 右。
            一方、(cur-> INUM!= NULL)
            { 
                CUR = cur-> 左。
            } 
            ヘッド - > INUM = cur-> INUM。
            ヘッド - >右=の削除(頭部>右、cur-> INUM); 
        } 
        それ以外の 場合(!頭部には> &&左!
        {
            リターンNULL ;
        } 
        
        { 
            ヘッド =(頭部>左== NULL)頭部>権利:頭部> 左。
        } 
    } 
    そう であれば(N>頭部> INUM)
    { 
        ヘッド - >右=削除(頭部> 右、N)。
    } 
    
    { 
        ヘッド - >左=削除(頭部> 左、N)。
    } 
    戻りヘッドと、
} 
無効 layertree(木*ヘッド、int型のn)
{ 
    場合(!ヘッド)のリターン;
    もし(N> = prder.size())
    {
        ベクトル < int型 > X; 
        prder.push_back(X)。
    } 
    prder [N] .push_back(ヘッド - > INUM)。
    layertree(ヘッド - >左、N + 1 )。
    layertree(ヘッド - >右、N + 1 )。
} 
ボイドポイント()
{ 
    ためintは iは= 0 ; I <prder.size(); I ++ 
    { 
        場合(prder [I] .empty())
        { 
            COUT << " N " << "  " 
        } 
        のためにINT J = 0 ; J <prder [I] .size(); J ++ 
        { 
            COUT << prder [I] [J] << "  " 
        } 
        COUT << ENDL。
    } 
}

おすすめ

転載: www.cnblogs.com/yylgoodjob/p/12069778.html