首页 > 代码库 > Not so Mobile UVA 839

Not so Mobile UVA 839

说说:

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


Not so Mobile UVA 839