二叉樹遞歸遍歷算法(前序、中序、後序)


#include <iostream>
using namespace std;
struct node{
	node *left;
	node *right;
	char value;
};
class CBiTree{
private:
	node *root;
	void preorder(node *r);
	void inorder(node *r);
	void postorder(node *r);
	void visit(node *n);
	void CreateBitree(node **r);
	void DestroyBitree(node *r);
public:
	CBiTree();
	~CBiTree();
	void preorder();
	void inorder();
	void postorder();
};
CBiTree::CBiTree(){
	CreateBitree(&root);
}
CBiTree::~CBiTree(){
	DestroyBitree(root);
}
void CBiTree::CreateBitree(node **r){
	char ch;
	cin>>ch;
	if('.'==ch){
		*r=NULL;
	}
	else
	{
		*r=new node;
		(*r)->value=ch;
		CreateBitree(&((*r)->left));
		CreateBitree(&((*r)->right));
	}
}
void CBiTree::DestroyBitree(node *r){
	if(r!=NULL){
		DestroyBitree(r->left);
		DestroyBitree(r->right);
		delete r;
	}
}
void CBiTree::visit(node *n){
	cout<<n->value<<" ";
}
void CBiTree::preorder(){
	preorder(root);		
}
void CBiTree::inorder(){
	inorder(root);
}
void CBiTree::postorder(){
	postorder(root);
}

void CBiTree::preorder(node *r){
	if(r!=NULL){
		visit(r);
		preorder(r->left);
		preorder(r->right);
	}
}
void CBiTree::inorder(node *r){
	if(r!=NULL){
		inorder(r->left);
		visit(r);
		inorder(r->right);
	}	
}
void CBiTree::postorder(node *r){
	if(r!=NULL){
		postorder(r->left);
		postorder(r->right);
		visit(r);
	}	
}
int main(){
	freopen("test.in","r",stdin);
	freopen("test.out","w",stdout);
	int n;
	cin>>n;
	while(n-->0){
		CBiTree *t=new CBiTree;
		cout<<"preorder:";t->preorder();cout<<endl;
		cout<<"inorder:";t->inorder();cout<<endl;
		cout<<"postorder:";t->postorder();cout<<endl;
		delete t;
	}
	return 0;
}


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