数据结构与算法实验题 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);
}