二叉樹的遍歷(先序、中序、後序)附:C++實現及其應用

目錄

一、概念

二、樣例的圖

三、3種遍歷方式的遍歷及C++遍歷實現

四、對於上面那棵樹,給出的三種遍歷結果

五、二叉樹遍歷的應用

 


一、概念

        二叉樹的遍歷(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());
} 

 

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