1. 程式人生 > >二叉樹的遞歸遍歷 天平UVa839

二叉樹的遞歸遍歷 天平UVa839

代碼 -- stdio.h 入參 解題思路 sin while -1 code

技術分享

技術分享

題意:輸入一個樹狀的天平,利用杠桿原理,根據力矩是否相等(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 }

二叉樹的遞歸遍歷 天平UVa839