建立二叉树,并完成三种遍历算法

#include<iostream>
#include<stack>
#define TElemType char
using namespace std;
typedef struct BiTNode
{
	TElemType data;
	struct BiTNode *lchild,*rchild;
	
}BiTNode,*BiTree;
//先序遍历的顺序建立二叉链表
void xCreateBiTree(BiTree &T)
{
	char ch;
	cin>>ch;
	if(ch=='#') T=NULL;
	else
	{
		T=new BiTNode;
		T->data=ch;
		xCreateBiTree(T->lchild);
		xCreateBiTree(T->rchild);
	}
} 
//先序遍历输出 
void xPrintTree(BiTree T) 
{

	if(T)
	{
		cout<<T->data;
		xPrintTree(T->lchild);
		xPrintTree(T->rchild);
		
	}
	else
	{
	 	 return;	 
	}
}
//中序遍历的顺序建立二叉链表
void zCreateBiTree(BiTree &T)
{
	char ch;
	cin>>ch;
	if(ch=='#') T=NULL;
	else
	{
		T=new BiTNode;
		zCreateBiTree(T->lchild);
		T->data=ch;
		zCreateBiTree(T->rchild);
	}
}
//中序遍历输出 
void zPrintTree(BiTree T) 
{

	if(T)
	{
		zPrintTree(T->lchild);
		cout<<T->data;
		zPrintTree(T->rchild);
	}
	else
	{
	 	 return;	 
	}
}
//后序遍历的顺序建立二叉链表
void hCreateBiTree(BiTree &T)
{
	char ch;
	cin>>ch;
	if(ch=='#') T=NULL;
	else
	{
		T=new BiTNode;
		hCreateBiTree(T->lchild);
		hCreateBiTree(T->rchild);
		T->data=ch;
	}
}
//后序遍历输出 
void hPrintTree(BiTree T) 
{

	if(T)
	{
		hPrintTree(T->lchild);
		hPrintTree(T->rchild);
		cout<<T->data;
	}
	else
	{
	 	 return;	 
	}
}
int main()
{
	BiTree root;
//	xCreateBiTree(root);
//	xPrintTree(root);
	/*
		输入:ABC##DE#G##F###
		输出:ABCDEGF
	*/
	
//	zCreateBiTree(root);
//	zPrintTree(root);
	/*
		输入:ABC##DE#G##F###
		输出:CBEGDFA
	*/
	hCreateBiTree(root);
	hPrintTree(root);
	/*
		输入:ABC##DE#G##F###
		输出:CGEFDBA
	*/
	
	return 0;
 } 

  

猜你喜欢

转载自www.cnblogs.com/chrysanthemum/p/11762574.html