二叉樹的前序遍歷、中序遍歷和後序遍歷及其算法

二叉樹的基本的遍歷規則有三種:前序遍歷,中序遍歷和後序遍歷。對於每一種遍歷,樹中每個結點都要經過3次。前序遍歷在第一次遇到結點時立即訪問,中序遍歷第二次遇到結點時訪問,後序遍歷則到第三次遇到結點時才訪問。

以一棵二叉樹說明其三種遍歷順序:
二叉樹的前序遍歷

二叉樹的前序遍歷

前序遍歷:- + a * b – c d / e f
中序遍歷:a + b * c – d – e / f
後序遍歷:a b c d – * + e f / -
前序遍歷算法:
template<class T>
void BinaryTree<T>::PreOrder(BinTreeNode<T> *subTree,
		       void (*visit)(BinTreeNode<T> *P)) {
	//遞歸函數:此算法按照前序遍歷以subTree爲根的二叉樹。
	if(subTree!=NULL){		//遞歸結束條件
		visit(subTree);		//訪問根節點
		PreOrder(subTree->leftChild,visit);	//前序遍歷根的左子樹
		PreOrder(subTree->rightChild,visit);	//前序遍歷根的右子樹
	}
};
中序遍歷算法:
template<class T>
void BinaryTree<T>::InOrder(BinTreeNode<T> *subTree,
		       void(*visit)(BinTreeNode<T> *p)){
	//遞歸函數:此算法按照中序次序遍歷以subTree爲根的子數
	if(subTree!=NULL) {		//如果subTree爲NULL,則結束遞歸
		InOrder(subTree->leftChild,visit);	//中序遍歷根的左子樹
		visit(subTree);	//訪問根節點
		InOrder(subTree->rightChild,visit);	//中序遍歷根的右子數
	}
};
後序遍歷算法:
template<class T>
void BinaryTree<T>::PostOrder(BinTreeNode<T> *subTree,
			void (*visit)(BinTreeNode<T> *P)) {
	//遞歸函數,此算法按照後序遍歷以subTree爲根的二叉樹
	if(subTree!=NULL) {		//遞歸結束條件
		PostOrder(subTree->leftChild,visit);	//後序遍歷根的左子樹
		PostOrder(subTree->rightChild,visit);	//後序遍歷根的右子樹
		visit(subTree);		//訪問根節點
	}
};

轉自:http://www.itzhai.com/preorder-binary-tree-traversal-inorder-traversal-and-postorder-traversal-of-algorithm-2.html
發佈了22 篇原創文章 · 獲贊 13 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章