二叉树递归遍历算法(前序、中序、后序)


#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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值