樹、森林的遍歷
阿新 • • 發佈:2020-06-28
樹、森林的遍歷
樹的先根遍歷
//樹的先根遍歷
void PreOrder(TreeNode *R){
if(R!=NULL){
visit(R);//訪問根節點
while(R還有下一個子樹T){
PreOrder(T);
}
}
}
將上述的樹轉換為二叉樹
樹的先根遍歷序列與這棵樹相應的二叉樹的先序遍歷序列相同
樹的後根遍歷
//樹的後根遍歷 void PostOrder(TreeNode *R){ if(R!=NULL){ while(R還有下一個子樹T){ PostOrder(T); } visit(R);//訪問根節點 } }
將上述樹轉換為二叉樹
樹的後根遍歷序列與這棵樹相應二叉樹的中序遍歷序列相同
樹的層次遍歷
可以稱為:廣度優先遍歷
需要用到輔助佇列來實現。
- 若樹非空,則根節點入隊
- 若佇列非空,隊頭元素出對並訪問,同時將該元素的孩子一次入隊
- 重複2直到佇列位空
先根和後根遍歷可以稱為:深度優先遍歷
森林的先序遍歷
若森林非空,則按如下規則進行遍歷:
- 訪問森林中第一棵樹的根節點
- 先序遍歷第一棵樹中根節點的子樹森林。
- 先序遍歷除去第一棵樹之後剩餘的樹構成的森林
效果等同於依次對各個樹進行先根遍歷
效果等同於依次對二叉樹的先序遍歷
森林的中序遍歷
若森林非空,則按如下規則進行遍歷:
- 中序遍歷森林中第一顆樹的根節點的子樹森林。
- 訪問第一棵樹的根節點。
- 中序遍歷除去第一棵樹之後剩餘的樹構成的森林。
效果等同於依次對各個樹的後根遍歷
效果等同於依次對二叉樹的中序遍歷