题目1104: 二叉排序树

题目描述

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

 

输入

输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。

 

输出

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。

 

样例输入
1
2
2
8 15
4
21 10 5 39
 

样例输出
2 
2
2
8 15
8 15
15 8
21 10 5 39
5 10 21 39
5 10 39 21
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源

2005年华中科技大学计算机研究生保研机试真题

 


/********************************* 
 *    日期:2013-3-17
 *    作者:SJF0115 
 *    题号: 天勤 题目1104: 二叉排序树
 *    来源:http://acmclub.com/problem.php?id=1104
 *    结果:AC 
 *    来源:2005年华中科技大学计算机研究生保研机试真题
 *    总结: 
**********************************/
#include
#include
#include

//二叉树结点
typedef struct BiTNode{
	//数据
	int data;
	//左右孩子指针
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

/*
	x 插入的数据
*/
void CreateBalanceTree(BiTree &T,int x){
	//若当前树为空
	if(T == NULL){
		T = (BiTree)malloc(sizeof(BiTNode));
		T->data = x;
		T->lchild = NULL;
		T->rchild = NULL;
	}
	//如果比当前结点小,插入左子树
	else if(x < T->data){
		CreateBalanceTree(T->lchild,x);
	}
	//如果比当前结点大,插入右子树
	else if(x > T->data){
		CreateBalanceTree(T->rchild,x);
	}
	//相等不插入
}


//先序遍历  
void PreOrder(BiTree T){ 

	//访问根节点  
	printf("%d ",T->data);
	if(T->lchild != NULL){
        //访问左子结点  
        PreOrder(T->lchild);
	}
	if(T->rchild != NULL){
        //访问右子结点  
        PreOrder(T->rchild);
	} 
} 

//中序遍历  
void InOrder(BiTree T){ 

	if(T->lchild != NULL){
        //访问左子结点  
        InOrder(T->lchild);
	}
	//访问根节点  
	printf("%d ",T->data); 
	if(T->rchild != NULL){
        //访问右子结点  
        InOrder(T->rchild);
	}
} 

//后序遍历  
void PostOrder(BiTree T){ 

	if(T->lchild != NULL){
        //访问左子结点  
        PostOrder(T->lchild);
	}
	if(T->rchild != NULL){
        //访问右子结点  
        PostOrder(T->rchild);
	}
	//访问根节点  
	printf("%d ",T->data); 
}  
int main()
{
	int N,x;
	while(scanf("%d",&N) != EOF){
		//注意N = 0
		if(N == 0){
			continue;
		}
		BiTree T = NULL;
		//创建二叉平衡树
		for(int i = 0;i < N;i++){
			scanf("%d",&x);
			CreateBalanceTree(T,x);
		}
		//先序遍历 
		PreOrder(T);
		printf("\n");
		//中序遍历
		InOrder(T);
		printf("\n");
		//后序遍历
		PostOrder(T);
		printf("\n");
	}
    return 0;
}


注意:N = 0 的情况









你可能感兴趣的:(九度&天勤OJ)