您的位置:首页 > 其它

UVA 297 - Quadtrees(建树)

2015-05-24 15:41 316 查看
比较麻烦做了一下午,主要是先建好这两棵树,然后在创建最后的树时顺便求出节点的面积。收获挺大的!

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
#define M 1000
char str1[M],str2[M];
typedef struct treenode
{
int data;
treenode *a,*b,*c,*d;
}*Tree;
int i,sum;
Tree &CreatTree(Tree &T,char *str,int fix)
{
++i;//printf("i=%d,str[i]=%c,fix=%d\n",i,str[i],fix);
T=(Tree)malloc(sizeof(treenode));
if(!T)exit(1);
if(str[i]=='p')
{
T->data=0;
T->a=CreatTree(T->a,str,fix/2);
T->b=CreatTree(T->b,str,fix/2);
T->c=CreatTree(T->c,str,fix/2);
T->d=CreatTree(T->d,str,fix/2);
}
else if(str[i]=='f')
{
T->data=fix*fix;
T->a=NULL;
T->b=NULL;
T->c=NULL;
T->d=NULL;
}
else if(str[i]=='e')
{
T->data=0;
T->a=NULL;
T->b=NULL;
T->c=NULL;
T->d=NULL;
}
return T;
}

void PreOrder(Tree &T)
{
if(!T)return ;
if(T->data!=0)
{
sum+=T->data;
//printf("xxxxxxxxxxxx%d  ",T->data);
}
else
{
PreOrder(T->a);
PreOrder(T->b);
PreOrder(T->c);
PreOrder(T->d);
}
}

Tree &CreatNewTree(Tree &T1,Tree &T2)
{
Tree T;
T=(Tree)malloc(sizeof(treenode));
if(T1->data||T2->data)
{
T->data = T1->data>=T2->data?T1->data:T2->data;
sum+=T->data;//printf("yyyyyyyyyyyyy%d  ",T->data);
T->a=NULL;
T->b=NULL;
T->c=NULL;
T->d=NULL;
}
else
{
T->data=0;
if(T1->a&&T2->a)
T->a=CreatNewTree(T1->a,T2->a);
else if(T1->a)
{
T->a=T1->a;
PreOrder(T->a);
}
else if(T2->a)
{
T->a=T2->a;
PreOrder(T->a);
}
if(T1->b&&T2->b)
T->b=CreatNewTree(T1->b,T2->b);
else if(T1->b)
{
T->b=T1->b;
PreOrder(T->b);
}
else if(T2->b)
{
T->b=T2->b;
PreOrder(T->b);
}
if(T1->c&&T2->c)
T->c=CreatNewTree(T1->c,T2->c);
else if(T1->c)
{
T->c=T1->c;
PreOrder(T->c);
}
else if(T2->c)
{
T->c=T2->c;
PreOrder(T->c);
}
if(T1->d&&T2->d)
T->d=CreatNewTree(T1->d,T2->d);
else if(T1->d)
{
T->d=T1->d;
PreOrder(T->d);
}
else if(T2->d)
{
T->d=T2->d;
PreOrder(T->d);
}
}
return T;
}

int main()
{
int t;
Tree T1,T2;
scanf("%d",&t);
getchar();
while(t--)
{
gets(str1);
i=-1;
T1=CreatTree(T1,str1,32);
gets(str2);
i=-1;
T2=CreatTree(T2,str2,32);
sum=0;
Tree T=CreatNewTree(T1,T2);
//PreOrder(T);
printf("There are %d black pixels.\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: