二叉树的遍历(先序、中序、后序)附: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());
} 

 

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