说说:
还是简单的二叉树遍历的题目。这道题不过是将一棵树的左右子树作为杠杆。若存在左子树于相应距离的乘积和右子树相应距离的乘积不等,或者说不平衡,则输出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; }
时间: 2024-10-12 15:03:23