21 遍歷二叉樹(三種遍歷方式:左根右(中序), 根左右(先序), 左右根(后序))


二叉樹遍歷:

  順着一條搜索路徑訪問二叉樹中的節點,每個節點均被訪問一次,且只被訪問一次。

遍歷目的:

  得到樹中所有節點的一個線性排列。

遍歷用途:

  是二叉樹元素增刪改查等操作的前提。

 

 

 

 

 

 

 

 

 

 

 

 

 

波蘭式(先序)、逆波蘭式(后序)等:

 

//定義節點
typedef struct BiNode{
    ElemType data;      //數據域
    struct BiNode *lchild, *rchild;         //左右孩子指針
}BiNode, *BiTree;
View Code

 

//二叉樹先序遍歷算法 - 根 左 右
int PreOrderTraverse(BiTree T){
    if( T ==   NULL){       //若是空二叉樹,則直接返回0
        return 1;
    }else{
        visit(T);       //訪問根節點(自定義visit()方法,比如獲取該節點的數據域)
        PreOrderTraverse(T->lchild);        //遍歷遞歸左子樹
        PreOrderTraverse(T->rchild);        //遍歷遞歸右子樹
    }
}

//二叉樹中序遍歷算法 - 左 根 右
int InOrderTraverse(BiTree T){
    if( T == NULL ){        //若是空二叉樹,則直接返回
        return 1;
    }else{
        InOrderTraverse(T->lchild);     //遍歷遞歸左子樹
        visit(T);       //訪問根節點
        InOrderTraverse(T->rchild);     //遍歷遞歸右子樹
    }
}

//二叉樹后序遍歷算法 - 左 右 根
int PostOrderTraverse(BiTree T){
    if( T == NULL ){
        return 1;
    }else{
        PostOrderTraverse(T->lchild);       //遍歷遞歸左子樹
        PostOrderTraverse(T->rchild);       //遍歷遞歸右子樹
        visit(T);       //訪問根節點
    }
}
View Code

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM