数据结构与算法实验题 6.1 鼹鼠掘土挑战赛

数据结构与算法实验题 6..1 鼹鼠掘土挑战赛

★实验任务

在潘多拉星的哈利路亚山上,生活着许多鼹鼠矿工,它们同属于潘多拉矿业公司哈利路

亚分公司。尽管在潘多拉星最美丽壮阔的地方工作,是一件十分让普通鼹鼠矿工羡慕嫉妒的

事情,但是,它们所遇到的困扰,却让普通鼹鼠调动到哈利路亚公司的计划被无限期搁置:

哈利路亚山坚硬的矿石地质,使得鼹鼠矿工们的工作——掘土打洞变得十分有挑战性。

为了锻炼鼹鼠们在哈利路亚山上的工作能力,分公司总经理决定举办第一届鼹鼠掘土挑

战赛,以激励鼹鼠们的工作热情,提高它们的工作能力。

鼹鼠们排成一列,由第一个开始向下挖洞,并待在洞中。第二只与第一只相比,若能力

值大的胜者,则向右下方挖洞。否则向左下方。接下来的鼹鼠们以此类推,若比洞中所在鼹

鼠能力值高,则向右下方走,否则向左下方。


总经理想知道,经过挑战赛之后,鼹鼠们的位置是怎样的。

位置表达式规则为:“<左子树表达式>根节点<右子树表达式>”,如左子树不存在,则只

输出“根节点<右子树表达式>”,右子树同理。

例如上图,可以表示为<2>3<<4>5<7>>


★数据输入
输入第一行为一个正整数 N (2 < N < 1000), 表示有 N 个鼹鼠。
第二行为 N 个整数 bi(0 <bi < 10000),表示每个鼹鼠的能力值。


★数据输出
输出鼹鼠们的位置表达式

输入示例 
5
3 5 2 7 4

输出示例

<2>3<<4>5<7>>


9
6 7 3 8 4 9 6 1 2
<<1<2>>3<4<6>>>6<7<8<9>>> 


5
1 1 1 1 1
<<<<1>1>1>1>1




考完大物一小时水掉的题。

建完树中序遍历即可。

#include<cstdio>
const int MAXN=10000+10;
int ability[MAXN];
struct node
{
	node *left;
	node *right;
	int ability;
};

struct list
{
	node *root;
	list(){ root =new node;root->left=root->right=NULL;}


}L;

void print(node *root)
{
	if(root->left!=NULL)
	{
		printf("<");
		print(root->left);
		printf(">");
	}

	printf("%d",root->ability);

	if(root->right!=NULL)
	{
		printf("<");
		print(root->right);
		printf(">");
	}
}

int main()
{
	int n,i,j;
	scanf("%d",&n);

	for(i=0;i<n;i++)
		scanf("%d",&ability[i]);

	L.root->ability=ability[0];

	for(i=1;i<n;i++)
	{
		node *cur=L.root;
		node *temp=new node;
		temp->left=temp->right=NULL;
		temp->ability=ability[i];	
		while(true)
		{
			if( ability[i] <= cur->ability)
			{
				
				if(cur->left==NULL)
				{
					cur->left=temp;
					break;
				}
				else
					cur=cur->left;
			}
			else
			{		
				if(cur->right==NULL)
				{
					cur->right=temp;
					break;
				}
				else
					cur=cur->right;
			}
		}				
	}

	print(L.root);
}


posted @ 2013-11-03 13:50  hr_whisper  阅读(302)  评论(0编辑  收藏  举报