データ構造5.28

する#include <stdio.hに> 
する#include <STDLIB.H> 

のtypedef 構造体BiTNode {
     チャーデータ。
    構造体 BiTNode * lchild、* rchild。
} BiTNode、 * BiTree。

INT INIT(BiTree&T)// 存在的意义并不大
{ 
    T = NULL;
    リターン 1 ; 
} 

INT BiTreedestroy(BiTree&T)
{ 
    場合(T)
    { 
        場合(T-> lchild)
            BiTreedestroy(T - > lchild)。
        もし(T-> rchild)
            BiTreedestroy(T - > rchild)。
        無料(T); 
        トン = NULL; 
    } 
    リターン 1 
} 

ボイド BiTreecreate(BiTree&T)
{ 
    チャーCH。
    チャー PCH [] = " ABD $$ EHJ $$ KL $$ M $ N $$$ CF $$ G $ I $$ " 静的 int型私= 0 ; 
    CH = PCH [I ++ ]; 
    
    もし(CH == ' $ ' 
    、T = NULL;
     
    { 
        T =(BiTree)はmalloc(sizeof (BiTNode))。
        もし(!トン)の出口( - 1 ); 
        トン - >データ=のCH; 
        BiTreecreate(T - > lchild)。
        BiTreecreate(T - > rchild)。
    } 
} 


ボイドpre_order_traveral(BiTree T)
{ 
    場合(T)
    { 
        のprintf(" %C "、T-> データ)。
        pre_order_traveral(T - > lchild)。
        pre_order_traveral(T - > rchild)。
    } 
} 

int型フラグ= 1 ボイドpre_order_traveral_brackets1(BiTree T)
{   // A(B(D、E(H(J、K(L、M(N)))))、C(F.、G(I)))
    IF (T)
    { 
        のprintf(" %のC "、T-> データ);
         IF(T-> || T-lchild> rchild)
        { 
            のprintf(" ");フラグに++ ; 
        }         
        pre_order_traveral_brackets1(T - > lchild);
         IF(T- > rchild)
         // IF(T-> T-lchild ||> rchild)が、これは、(持つことであるかを決定するために使用される)状況
         // 出力は、ディスプレイ要件「サブツリー右サブツリーを残さなかった」には当てはまりません、それはありませんが、この文を使用して、より合理的です
        printf(" " ); 
        pre_order_traveral_brackets1(T - > rchild)。
    } 
} ボイドpre_order_traveral_brackets(BiTreeさt)
{   // A(B(D、E(H(J、K(L、M(N)))))、C(F、G(I)))であれば( T)
    { 
        のprintf(" %C "、T-> データ)。
        // IF(T-> lchild || T-> rchild)   
        のprintf(" " ); 
        pre_order_traveral_brackets1(T - > lchild);
         一方、( - フラグ)
        {

    
            printf(" " ); 
        } 
        // IF(T-> lchild) 
        のprintf(" " )。
        pre_order_traveral_brackets1(T - > rchild)。
        一方、(フラグ- + 1 
        { 
            のprintf(" " )。
        } 
    } 
} int型(最大整数int型B)
{ 戻り > bは?A:B; 
} INT BiTreedeep(BiTree T)
{ もし(T ==


    

    NULL)
     の戻り 0 ;
    
    { 
        場合(T-> lchild == NULL && T-> rchild == NULL)
             リターン 1 他の
            リターン 1つの + MAX(BiTreedeep(T-> lchild)、BiTreedeep(T-> rchild)); 
            
    } 
} 

int型{)(主

    BiTree binarytree。
    もし(INIT(binarytree))
    のprintf(" 创建二叉树成功\ nは!" ); 
    BiTreecreate(binarytree)。
    
    printf(" 输出二叉树:" ); 
    pre_order_traveral_brackets(binarytree)。

    printf("\バイナリツリーBTのn個の高さ:%dは\ nを"BiTreedeep(BinaryTree)); IF (BiTreedestroy(BinaryTree))
    のprintf(" バイナリ成功をリリース!" ); 
}
    
    

 

おすすめ

転載: www.cnblogs.com/mingye/p/10936354.html