说说:
还是简单的二叉树遍历的题目。这道题不过是将一棵树的左右子树作为杠杆。若存在左子树于相应距离的乘积和右子树相应距离的乘积不等,或者说不平衡,则输出NO。全部平衡,则整棵树平衡,输出YES。解法的话,递归判断即可。
源代码:
#include <stdio.h>
int mobile(int*);
int main(){
int T,w;
//freopen("data","r",stdin);
scanf("%d",&T);
while(T--){
if(mobile(&w))
printf("YES\n");
else
printf("NO\n");
if(T) putchar('\n');
}
return 0;
}
int mobile(int *w){
int wl,wr;
int dl,dr;
int r1,r2;
scanf("%d%d%d%d",&wl,&dl,&wr,&dr);
r1=r2=1;//注意要先赋值
if(wl==0)
r1=mobile(&wl);
if(wr==0)
r2=mobile(&wr);
*w=wl+wr;//子树的总重量
if(wl*dl!=wr*dr||!r1||!r2)//本身或左右子树不平衡,则不平衡
return 0;
else
return 1;
}原文地址:http://blog.csdn.net/u011915301/article/details/39206607