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

#include <iostream>
#include <stack>
using namespace std;
struct node{
	node *left;
	node *right;
	char value;
};
class CBiTree{
private:
	node *root;
	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(){
	stack<node*> st;
	node *p=root;
	while(p!=NULL||!st.empty()){
		if(p!=NULL){
			visit(p);
			st.push(p);
			p=p->left;
		}
		else{
			p=st.top();st.pop();
			p=p->right;
		}
	}
}
void CBiTree::inorder(){
	stack<node*> st;
	node *p=root;
	while(p!=NULL||!st.empty()){
		if(p!=NULL){
			st.push(p);
			p=p->left;
		}
		else{
			p=st.top();st.pop();
			visit(p);
			p=p->right;
		}
	}
}
void CBiTree::postorder(){
	stack<node*> st;
	node *p=root,*q=NULL;
	while(p!=NULL||!st.empty()){
		if(p!=NULL){
			st.push(p);
			p=p->left;
		}
		else{
			p=st.top();
			if(p->right==NULL||p->right==q){
				visit(p);
				q=p;
				st.pop();
				p=NULL;
			}
			else{
				p=p->right;
			}
		}
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值