最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言二叉樹層序遍歷

 更新時間:2022年04月19日 10:55:13   作者:???????sndapk  
這篇文章主要介紹了C語言二叉樹層序遍歷,文章基于C語言的相關資料展開詳細的文章內容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助

實現(xiàn)下面圖中的二叉樹層序遍歷

二叉樹層序遍歷(C語言)_evel traversal

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>

typedef struct node {
    char data;
    struct node *lchild;
    struct node *rchild;
}NODE, *PNODE;

typedef struct qnode {
    PNODE pnode;
    struct qnode *next;
}QNODE, *PQNODE;

typedef struct queue {
    PQNODE front;
    PQNODE rear;
    int size;
}QUEUE, *PQUEUE;

PNODE CreateTree(void);
void initQueue(PQUEUE);
void enQueue(PQUEUE, PNODE);
bool deQueue(PQUEUE, PNODE *);
void levelTraversal(PNODE);

PNODE CreateTree(void)
{
    PNODE pA = (PNODE)malloc(sizeof(NODE));
    PNODE pB = (PNODE)malloc(sizeof(NODE));
    PNODE pC = (PNODE)malloc(sizeof(NODE));
    PNODE pD = (PNODE)malloc(sizeof(NODE));
    PNODE pE = (PNODE)malloc(sizeof(NODE));
    PNODE pF = (PNODE)malloc(sizeof(NODE));
    PNODE pG = (PNODE)malloc(sizeof(NODE));

    pA->data = 'A';
    pB->data = 'B';
    pC->data = 'C';
    pD->data = 'D';
    pE->data = 'E';

    pA->lchild = pB;
    pA->rchild = pC;
    pB->lchild = pB->rchild = NULL;
    pC->lchild = pD;
    pC->rchild = NULL;
    pD->lchild = NULL;
    pD->rchild = pE;
    pE->lchild = pE->rchild = NULL;

    return pA;
}

void initQueue(PQUEUE pQ) {
    pQ->front = pQ->rear = (PQNODE)malloc(sizeof(QNODE));
    if (! pQ->front) {
        printf("init malloc error!\n");
        exit(-1);
    }
    pQ->front->next = NULL;
    pQ->size = 0;
}

void enQueue(PQUEUE pQ, PNODE pnode) {
    //printf("en_queue %c ", pnode->data);
    PQNODE pNew;
    pNew = (PQNODE)malloc(sizeof(QNODE));
    if (!pNew) {
        printf(" en_queue malloc error!\n");
        exit(-1);
    }
    pNew->pnode = pnode;
    pNew->next = NULL;

    pQ->rear->next = pNew;
    pQ->rear = pNew;
    pQ->size++;
    //printf(" success.\n");
}
bool deQueue(PQUEUE pQ, PNODE *ppnode) {
    //printf("de_queue...");
    PQNODE tmp;

    if (pQ->front->next == NULL) {
        printf(" failed, queue empty!\n");
        return false;
    }

    tmp = pQ->front->next;
    *ppnode = tmp->pnode;

    pQ->front->next = tmp->next;
    // 最后一個節(jié)點出隊特殊處理
    if (tmp->next == NULL)
        pQ->rear = pQ->front;
    free(tmp);
    pQ->size--;
    //printf("success, value: %c\n", (*ppnode)->data);
    return true;
}

void levelTraversal(PNODE pnode){
    if (pnode) {
        QUEUE Q;
        PNODE tmp;
        initQueue(&Q);
        enQueue(&Q, pnode);
        int levelSize, level;
        level = 0;
        while (Q.size) {
            sleep(1);
            level++;
            levelSize = Q.size;
            printf("traversal level %d have %d nodes:", level, levelSize);
            for (int i=0; i<levelSize; i++) {
                deQueue(&Q, &tmp);
                printf(" %c,", tmp->data);
                if (tmp->lchild)
                    enQueue(&Q, tmp->lchild);
                if (tmp->rchild)
                    enQueue(&Q, tmp->rchild);
            }
            printf("\n");
        }
    }
}


int main(void)
{
    PNODE T = CreateTree();
    printf("層序遍歷結果:\n");
    levelTraversal(T);

    return 0;
}

output

[root@8be225462e66 c]# gcc level_traversal.c && ./a.out
層序遍歷結果:
traversal level 1 have 1 nodes: A,
traversal level 2 have 2 nodes: B, C,
traversal level 3 have 1 nodes: D,
traversal level 4 have 1 nodes: E,

到此這篇關于C語言二叉樹層序遍歷的文章就介紹到這了,更多相關C語言遍歷內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • VC++實現(xiàn)View內容保存為圖片的方法

    VC++實現(xiàn)View內容保存為圖片的方法

    這篇文章主要介紹了VC++實現(xiàn)View內容保存為圖片的方法,涉及VC++中Bitmap類的save方法相關使用技巧,需要的朋友可以參考下
    2016-08-08
  • 基于C語言代碼實現(xiàn)點餐系統(tǒng)

    基于C語言代碼實現(xiàn)點餐系統(tǒng)

    這篇文章主要為大家詳細介紹了基于C語言代碼實現(xiàn)點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 淺析C語言字中的符串格式化顯示

    淺析C語言字中的符串格式化顯示

    以下是對C語言字中的符串格式化顯示進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C++中string使用+號與int拼接方式

    C++中string使用+號與int拼接方式

    這篇文章主要介紹了C++中string使用+號與int拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++實現(xiàn)簡單校園導游系統(tǒng)

    C++實現(xiàn)簡單校園導游系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單校園導游系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實現(xiàn)自動存取款機模擬系統(tǒng)

    C語言實現(xiàn)自動存取款機模擬系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)自動存取款機模擬系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++超詳細講解智能指針

    C++超詳細講解智能指針

    為了解決內存泄漏的問題,C++中提出了智能指針。內存泄漏的產(chǎn)生原因有很多,即使我們正確的使用malloc和free關鍵字也有可能產(chǎn)生內存泄漏,如在malloc和free之間如果存在拋異常,那也會產(chǎn)生內存泄漏。這種問題被稱為異常安全
    2022-06-06
  • C語言實現(xiàn)隨機讀寫文件的函數(shù)詳解

    C語言實現(xiàn)隨機讀寫文件的函數(shù)詳解

    文件的隨機讀寫,可以在文件中指定的任意位置讀或者寫。這篇文章主要為大家詳細介紹了C語言實現(xiàn)隨機讀寫文件的3個函數(shù),感興趣的可以了解一下
    2023-03-03
  • C++中異常的深度解析

    C++中異常的深度解析

    異常處理機制允許程序中獨立開發(fā)部分能夠在運行時就出現(xiàn)的問題進行通信并做出相應的處理,這篇文章主要介紹了C++中異常的深度解析,需要的朋友可以參考下
    2025-03-03
  • C++ 遍歷目錄下文件簡單實現(xiàn)實例

    C++ 遍歷目錄下文件簡單實現(xiàn)實例

    這篇文章主要介紹了c++ 遍歷文件的相關資料,這里附有實現(xiàn)實例代碼,需要的朋友可以參考下
    2017-02-02

最新評論

河源市| 临漳县| 如皋市| 巩义市| 康平县| 布尔津县| 阳泉市| 佛学| 卢湾区| 阿图什市| 三穗县| 淮安市| 宝丰县| 北海市| 抚顺县| 定南县| 弥勒县| 汶川县| 定结县| 明水县| 莱阳市| 平原县| 大安市| 满城县| 定州市| 台江县| 桐柏县| 五华县| 呼伦贝尔市| 称多县| 青州市| 瑞丽市| 慈利县| 庆阳市| 枞阳县| 南宫市| 黄山市| 大悟县| 高陵县| 松江区| 广昌县|