中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二叉樹的代碼實現

發布時間:2020-08-12 13:23:29 來源:網絡 閱讀:405 作者:BarnabyRoss 欄目:編程語言

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

struct BiTNode{

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

   有了這么一個二叉樹的結構之后,我們可以開始動態的創建結點。比如,我們要創建的這棵樹有5個元素,A、B、C、D、E。那么,創建結點的代碼如下:

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 ) );

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

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

中序遍歷結果為:

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

有了樹的理論上的形狀之后,我們要開始對這些結點進行聯接。代碼如下:

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;

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

void PreOrderTraverse ( struct BiTNode *T ){

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

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

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 );

}

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

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 );

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新营市| 宝兴县| 进贤县| 五家渠市| 丹江口市| 无棣县| 晋州市| 宝兴县| 阜阳市| 金塔县| 东丰县| 韶关市| 汉中市| 碌曲县| 墨江| 高邮市| 义乌市| 鄂州市| 巴东县| 平凉市| 旬邑县| 丹巴县| 林周县| 饶平县| 禹城市| 磐石市| 澜沧| 彭州市| 舞钢市| 鞍山市| 乐都县| 武胜县| 抚远县| 出国| 江永县| 秦皇岛市| 巴楚县| 东辽县| 贺州市| 民和| 新宁县|