4から2.4探索木が決定された基礎実験(25分) - 二分探索木

 

 

 

 

 

 問題解決のアイデア:

図1に示すように、入力データ側縁バイナリ検索ツリー、アレイに入力されるデータを構成

図2に示すように、先行予約先に、結果は、配列ツリーに格納されます。

図3に示すように、それは、ツリーアレイと均一なアレイか否かを判断します

    1)一貫した出力YES、出力バイナリツリーを横断した後、

    2)矛盾し、配列に格納されたプレスバイナリ画像注文トラバーサル、木、アレイ及びコンパレータツリーアレイは同じです

       バイナリツリーを横断、出力画像に応じた一貫した出力YES、

       それ以外の場合は、出力NO。

する#include <stdio.hに> 
する#include <malloc.hを>
 の#define最大100 
のtypedef 構造体TNODE {
     int型データ、
    ストラクト TNODE * 左;
    ストラクト TNODE * 右を。
} * BiTree。
BiTree BuildTree(BiTree T、int型X){//建立二叉搜索树
     場合(!{T)
        T =(BiTree)はmalloc(はsizeof (BiTree))。
        T - >データ= X。
        T - >左= T->右= NULL; 
    } {
         場合(X <T->データ)
            T - >左= BuildTree(T-> 左、X)。
        他の
            T - >右= BuildTree(T-> 右、X); 
    } 
    戻りTを。
} 
int型のツリー[最大]。
int型 K1 = 0 ;
ボイドPreOrderTraverse(BiTree T){//前序遍历
     場合(T){
 //         のprintf( "%dの"、T->データ)。
        ツリー[K1 ++] = T-> データ; 
        PreOrderTraverse(T - > 左)。
        PreOrderTraverse(T - > 右)。


    } 
} 
int型 K2 = 0 空隙MirrorPreOrder(BiTree T){//镜像前序遍历
     場合(T){
 //         のprintf( "%dの"、T->データ)。
        ツリー[K2 ++] = T-> データ; 
        MirrorPreOrder(T - > 右)。
        MirrorPreOrder(T - > 左)。

    } 
} 
int型フラグ= 0 ボイド後順(BiTree T){//后序遍历
     場合(T){ 
        後順(T - > 左)。
        後順(T - > 右)。
        もし(フラグ)
            のprintf("  " )。
        他のフラグ= 1; 
        printf(" %d個"、T-> データ)。
    } 
} 
int型のタグ= 0 MirrorPostOrder(BiTree T){//镜像后序遍历
     場合(T){ 
        MirrorPostOrder(T - > 右)。
        MirrorPostOrder(T - > 左)。
        場合(タグ)
            のprintf("  " );
        他のタグ= 1 ; 
        printf(" %d個"、T-> データ)。
    } 
} 
int型 IsSame(INTA []、INTツリー[]、INT N-){//が同じ順序の先行順走査で入力データか否かを判断
     INT I;
     のため(私は= 0を I <N-; I ++ ){
         IF!(A [I] = ツリー[I])を
             返す 0 ; 
    } 
    リターン 1。; 
} 
int型のmain(){
     int型I、X、N-; 
    scanfの(" %のD "、およびN-);
     INT A [N-]; 
    BiTree T = NULL;
     のための(I = 0、I <N - 、I ++ ){ 
        scanfの("%のD "および[I]); 
        T = BuildTree(T、[I]); 
    } 
    PreOrderTraverse(T); 
    場合(IsSame(木、N)){ 
        のprintf(" YES \ n " ); 
        後順(T); 
    } { 
        MirrorPreOrder(T); 
        場合(IsSame(木、N)){ 
            のprintf(" YES \ n " ); 
            MirrorPostOrder(T); 
        } 
            のprintf(" NO " ); 
    } 
    戻り 0 ; 

}

 

おすすめ

転載: www.cnblogs.com/snzhong/p/12444752.html