二叉树的递归遍历 天平UVa839

题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡

解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树

2.此时的W1和W2会变成子树的重量之和,此时最好用到引用(同时改变传入参数的值)

3.递归的输入,并且判断子天平是否平衡

代码如下:

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 bool input(int &W){      //引用,改变传入参数的值
 5     int W1,W2,D1,D2;
 6     int b1=true;
 7     int b2=true;
 8     scanf("%d%d%d%d",&W1,&D1,&W2,&D2);
 9     if(W1==0){        //先左再右
10         b1=input(W1);
11     }
12     if(W2==0){
13         b2=input(W2);
14     }
15     W=W1+W2;
16     return b1&&b2&&(W1*D1==W2*D2);
17 }
18 int main(){
19     freopen("in.txt","r",stdin)
20     int n,w;
21     scanf("%d",&n);
22     while(n--){
23         if(input(w))
24             printf("YES\n");
25         else
26             printf("NO\n");
27         if(n)
28             printf("\n");
29     }
30     return 0;
31 }
posted @ 2017-07-26 22:30  木子丘  Views(164)  Comments(0Edit  收藏  举报