數據結構筆記——二叉樹先/中/後序遍歷

目錄

一、什麼是遍歷

二、二叉樹的遍歷(手寫練習)

三、先序遍歷(代碼)

四、中序遍歷(代碼)

五、後序遍歷(代碼)

六、求先序遍歷序列

七、求中序遍歷序列

八、求後序遍歷序列

九、求樹的深度(應用)

十、總結


一、什麼是遍歷

遍歷:按照某種次序把所有結點都訪問一遍

二、二叉樹的遍歷(手寫練習)

二叉樹的遞歸特性:

①要麼是個空二叉樹

②要麼就是由“根節點+左子樹+右子樹”組成的二叉樹

先序遍歷:根左右(NLR)

中序遍歷:左根右(LNR)

後序遍歷:左右根(LRN)

三、先序遍歷(代碼)

typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild,rchild;
}BiTNode,*BiTree;

void PreOrder(BiTree T){
    if(T != NULL){
        visit(T);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

時間複雜度O(h + 1),空間複雜度O(h)

四、中序遍歷(代碼)

void PreOrder(BiTree T){
    if(T != NULL){
        PreOrder(T->lchild);    //遞歸遍歷左子樹
        visit(T);        //訪問根節點
        PreOrder(T->rchild);        //遞歸遍歷右子樹
    }
}

五、後序遍歷(代碼)

void PreOrder(BiTree T){
    if(T != NULL){
        PreOrder(T->lchild);    //遞歸遍歷左子樹
        PreOrder(T->rchild);        //遞歸遍歷右子樹
        visit(T);        //訪問根節點
    }
}

六、求先序遍歷序列

每個結點都會被路過3次

七、求中序遍歷序列

八、求後序遍歷序列

九、求樹的深度(應用)

十、總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章