遍历二叉树的基本运算

/*3. 完成对二叉树的二叉链表结构的定义。
并编写算法生成一棵二叉树,
以及编写二叉树的先序遍历、中序遍历、后序遍历算法,
并且验证各算法功能已实现。*/
#include<iostream>
using namespace std;
typedef char datatype;
typedef struct node *pointer; //结点指针类型
struct node                   //结点类型
{	datatype data;
	pointer lchild,rchild;
};
typedef pointer bitree;              //根结点指针

bitree pre_creat()					 //由先根序列建立二叉树,返回根指针      
{
	bitree t;
	char ch;
	cin>>ch;
	if(ch=='@')	return NULL;        //虚结点
	t=new node;						//生成根结点
	t->data=ch;						//赋值
	t->lchild=pre_creat();			//生成左子树
	t->rchild=pre_creat();			//生成右子树
	return t;
}


void preorder(bitree t)				//先根遍历
{	
	if(t==NULL)	return;
	cout<<t->data;					//访问根
	preorder(t->lchild);			//先根遍历左子树
	preorder(t->rchild);			//先根遍历右子树
}

void inorder(bitree t)				//中根遍历
{
	if(t==NULL) return;
	inorder(t->lchild);				//中根遍历左子树
	cout<<t->data;				//访问根
	inorder(t->rchild);				//中根遍历右子树
}

void posorder(bitree t)
{
	if(t==NULL) return;
	posorder(t->lchild);			//后根遍历左子树
	posorder(t->rchild);			//后根遍历右子树
	cout<<t->data;					//访问根
}

int main()
{
	bitree T;
	cout<<"---------欢迎测试-------------"<<endl;
	cout<<"   用先根序列建立二叉树:  "<<endl;
	T=pre_creat();
	cout<<"   调用preorder()函数遍历二叉树     "<<endl;
	preorder(T);
	cout<<endl;
	cout<<"   调用inorder()函数遍历二叉树     "<<endl;
	inorder(T);
	cout<<endl;
	cout<<"   调用posorder()函数遍历二叉树     "<<endl;
	posorder(T);
	cout<<endl;
	system("pause");
	return 0;
}

posted on 2011-11-16 09:34  1.曲待续  阅读(365)  评论(0编辑  收藏  举报

导航