鼹鼠们排成一列,由第一个开始向下挖洞,并待在洞中。第二只与第一只相比,若能力
值大的胜者,则向右下方挖洞。否则向左下方。接下来的鼹鼠们以此类推,若比洞中所在鼹
鼠能力值高,则向右下方走,否则向左下方。
总经理想知道,经过挑战赛之后,鼹鼠们的位置是怎样的。
位置表达式规则为:“<左子树表达式>根节点<右子树表达式>”,如左子树不存在,则只
输出“根节点<右子树表达式>”,右子树同理。
例如上图,可以表示为<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>>
此题就是二叉搜索树+中序输出算法的应用,理解算法后,就容易多了
注意题目:若能力值大的胜者,则向右下方挖洞!
19:36:12
#include<stdio.h>
#include<stdlib.h>
typedef struct node *btlink;
struct node
{
int data;
btlink left;
btlink right;
}node;
int o=0,max=-1,n,t=0,key=0;
btlink insert(btlink root,int x)
{
btlink p;
p=(btlink)malloc(sizeof(node));
p->data=x;
p->left=p->right=NULL;
if(root==NULL)
{
root=p;
}
else if(root->data>=x)
{
root->left=insert(root->left,x);
}
else
{
root->right=insert(root->right,x);
}
return root;
}
void InOrder(btlink root,int max)
{
if(root!=NULL)
{
if(o>0)
{
printf("<");
key++;
}
{
o++;
InOrder(root->left,max);
printf("%d",root->data);
InOrder(root->right,max);
}
if(t<key)
{
//printf(" t=%d ",t);
printf(">");
t++;
}
}
}
int main()
{
int i;
int x;
btlink BT;
BT=(btlink)malloc(sizeof(node));
BT=NULL;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(x>max)
max=x;
BT=insert(BT,x);
}
InOrder(BT,max);
printf("\n");
return 0;
}
AC code