二叉樹的代碼實現(xiàn)

   二叉樹是一種非線性的結(jié)構(gòu),但是在計算機(jī)中存儲時,卻要按照線性來存儲。二叉樹也是由一個一個結(jié)點構(gòu)成,只不過是,一個結(jié)點中既要存放數(shù)據(jù),又要存放左孩子的指針和右孩子的指針。所以,我們想要實現(xiàn)二叉樹,首先就得有一個二叉樹的結(jié)構(gòu),根據(jù)剛才的分析,那么二叉樹結(jié)構(gòu)中的變量應(yīng)該要有三個。代碼如下:

站在用戶的角度思考問題,與客戶深入溝通,找到羅莊網(wǎng)站設(shè)計與羅莊網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋羅莊地區(qū)。

struct BiTNode{

    int data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
};

   有了這么一個二叉樹的結(jié)構(gòu)之后,我們可以開始動態(tài)的創(chuàng)建結(jié)點。比如,我們要創(chuàng)建的這棵樹有5個元素,A、B、C、D、E。那么,創(chuàng)建結(jié)點的代碼如下:

struct BiTNode *A = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *B = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *C = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *D = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );
struct BiTNode *E = ( struct BiTNode * ) malloc ( sizeof ( struct BiTNode ) );

接下來,就是要對這些結(jié)點進(jìn)行初始化,并且生成一棵樹。這棵樹,先序遍歷結(jié)果為:

A->B->C->D->E

中序遍歷結(jié)果為:

B->A->D->C->E

有了樹的理論上的形狀之后,我們要開始對這些結(jié)點進(jìn)行聯(lián)接。代碼如下:

A->data = 'A';
A->lchild = B;
A->rchild = C;
B->data = 'B';
B->lchild = B->rchild = NULL;
C->data = 'C';
C->lchild = D;
C->rchild = E;
D->data = 'D';
D->lchild = D->rchild = NULL;
E->data = 'E';
E->lchild = E->rchild = NULL;

二叉樹創(chuàng)建好之后,就是要開始遍歷二叉樹了。二叉樹的遍歷有三種,前序,中序和后序。二叉樹的遍歷事實上是通過遞歸實現(xiàn)的。那么,先來實現(xiàn),先序遍歷。代碼如下:

void PreOrderTraverse ( struct BiTNode *T ){

    if ( T == NULL )
        return;
        
    if ( T != NULL )
    printf ( "%c", T->data );     //先訪問根結(jié)點
    if ( T != NULL )
    PreOrderTraverse ( T->lchild );  //訪問左子樹
    if ( T != NULL )
    PreOrderTraverse ( T->rchild );   //訪問右子樹
    
}

接著是中序遍歷,中序遍歷不過是先訪問左子樹,再訪問根結(jié)點,最后訪問右子樹。代碼如下:

void InOrderTraverse ( struct BiTNode *T ){

    if ( T == NULL )
        return;
        
    if ( T != NULL )
        InOrderTraverse ( T->lchild );
    if ( T != NULL )
        printf ( "%c", T->data );
    if ( T != NULL )
        InOrderTraverse ( T->rchild );

}

最后一種,就是后序遍歷。后序遍歷就是先訪問左子樹,再訪問右子樹,最后訪問根結(jié)點。代碼如下:

void PostOrderTraverse ( struct BiTNode *T ){

    if ( T == NULL )
        return;
        
    if ( T != NULL )
        PostOrderTraverse ( T->lchild );
    if ( T != NULL )
        PostOrderTraverse ( T->rchild );
    if ( T != NULL )
        printf ( "%c", T->data );

}

網(wǎng)頁題目:二叉樹的代碼實現(xiàn)
當(dāng)前網(wǎng)址:http://muchs.cn/article36/ihsisg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計域名注冊、建站公司自適應(yīng)網(wǎng)站、服務(wù)器托管網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名