现在的位置: 首页 > 综合 > 正文

1411 自己排序的二叉树

2013年07月19日 ⁄ 综合 ⁄ 共 1357字 ⁄ 字号 评论关闭

 

描述

经过前两周的练习,你的自己写的排序二叉树的应该至少能够支持如下操作:

CreateBTree(T []); //从某种类型的数组建立一棵排序二叉树,这种类型的值可比较大小

Travel(); //中序遍历这棵排序二叉树。

Insert(T); //插入一个数据T

现在需要你写一个Delete(T)函数,删除这棵排序二叉树中值为T的结点,如果有多个值,只删除一个,删除后仍保持排序二叉树的性质。(注意,不是删除以T为节点的子树,而是只删除这个值)

现在我们帮你做单元测试,以便了解你自己写的二叉排序树在逻辑上是否正确。

首先,我们会给出一个int 数组,你需要根据这个int 数组建立一棵二叉排序树,下面我们会给出N条指令,指令只有两种Insert x, Delete x. Insert x 指令需要你将x插入到建好的二叉排序树中,Delete x指令需要你将值为x的结点删除(只删除一个,而且不保证x一定在二叉排序树中),注意本题查代码(7)

输入

第一行为测试数据的组数n, 下面有n组测试数据。对于每组测试数据,第一行为用逗号隔开的int数列,你需要用这个数据初始化一棵排序二叉树,下面一行为指令数m, 格式按照题目描述。数据均为int型。

输出

输出一共有n行,对应每组测试数据,在所有的指令都执行完后,把当前的排序二叉树中序输出,元素之间用空格隔开。

样例输入
1
1,3,5,2
2
Insert 4
Delete 5
样例输出
1,2,3,4

 

此题用数组可以模拟

#include <stdio.h>
#include <string.h>
char s[1000];
main()
{
	int number;
	int length,i,j;
	int p;
	int a[1000];
	int up;
	int temp;
	int count;
	char op;
	scanf("%d",&number);
	getchar();
	while(number--)
	{
		
		up=0;
		
		gets(s);
		length=strlen(s);
		i=0;
		p=0;
		for(i=0;i<length;i++)
		{
			
			if(s[i]!=',')
			{
				
				p=0;		
				while(s[i] >= '0' && s[i] <= '9'&&i<length)
				{
					p = p * 10 + s[i] - '0';
					i++;
				}
				a[up++]=p;
			}
			else
				continue;
		}
		scanf("%d",&count);

		
	while(count--)
	{
		getchar();
			scanf("%c",&op);
			if(op=='I')
			{
				for(i=0;i<6;i++)
					scanf("%c",&op);
				scanf("%d",&temp);
				a[up++]=temp;

			}
			if(op=='D')
			{
				for(i=0;i<6;i++)
					scanf("%c",&op);
				scanf("%d",&temp);
				for(j=0;j<up;j++)
				{
					if(a[j]==temp)
					{
						for(p=j;p<up-1;p++)
							a[p]=a[p+1];
						up--;
					}
				}
			}
		
	}	
			
	for(i=0;i<up;i++)
		for(j=i+1;j<up;j++)
		{
			if(a[i]>a[j])
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
			
			
	for(i=0;i<up-1;i++)
		printf("%d,",a[i]);
	
			printf("%d\n",a[up-1]);	
			
			
			
	}
}

 

抱歉!评论已关闭.