目錄
一、概念
二叉樹的遍歷(Traversing binary tree)是指從根節點出發,按照某種次序訪問二叉樹中所有的節點,使得每個節點被依次訪問且僅被訪問一次。
二、樣例的圖
三、3種遍歷方式的遍歷及C++遍歷實現
1、前序遍歷(preorder traversal):先訪問根節點-->再訪問左子樹-->再訪問右子樹
template <typename E>
void preorder(BinNode<E>* root){
if(root == NULL) return;
visit(root);
preorder(root->left());
preorder(root->right());
}
2、中序遍歷(inorder traversal):先訪問左子樹-->再訪問根節點-->再訪問右子樹
template <typename E>
void inorder(BinNode<E>* root){
if(root == NULL) return;
inorder(root->left());
visit(root);
inorder(root->right());
}
3、後序遍歷(postorder traversal):先訪問左子樹-->再訪問右子樹-->再訪問根節點
template <typename E>
void postorder(BinNode<E>* root){
if(root == NULL) return;
postorder(root->left());
postorder(root->right());
visit(root);
}
四、對於上面那棵樹,給出的三種遍歷結果
1、先序遍歷:A->B->D->F->G->H->I->E->C;
2、中序遍歷:F->D->H->G->I->B->E->A->C;
3、後序遍歷:F->H->I->G->D->E->B->C->A。
五、二叉樹遍歷的應用
1、求二叉樹中節點數目
思路:一個非空子樹的節點數等於它的根加上其左右子樹的節點數目之和。
template <typename E>
int count(BinNode<E>* root){
if(root == NULL) return 0;
return 1 + count(root->left())
+ count(root->right());
}