目錄
一、什麼是遍歷
遍歷:按照某種次序把所有結點都訪問一遍
二、二叉樹的遍歷(手寫練習)
二叉樹的遞歸特性:
①要麼是個空二叉樹
②要麼就是由“根節點+左子樹+右子樹”組成的二叉樹
先序遍歷:根左右(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次