数据结构与算法实验题 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); }
新 blog : www.hrwhisper.me