递归的过程还是比较好理解的,就是不停输出判断是左右是否平衡

难点在于引用传值,w=w1+w2可以将上一个调用时的w1和w2赋值以此得到下面所有子树的总重量

此外还需注意b1和b2初始化,因为递归到最底层是没有子树的所以没法赋值但还是得回溯所以初始化为1

#include <iostream>
#include <stdio.h>
using namespace std;
bool getdate(int &w)
{
    int w1,d1,w2,d2;
    int b1=1,b2=1;
    cin>>w1>>d1>>w2>>d2;
    if(!w1)b1=getdate(w1);
    if(!w2)b2=getdate(w2);
    w=w1+w2;
    if(b1&&b2&&(w1*d1==w2*d2))
        return 1;
    else return 0;
}
int main()
{
    int t,w;
    cin>>t;
    while(t--)
    {
        if(getdate(w))
            printf("YES\n");
        else printf("NO\n");
        if(t)
            cout<<endl;
    }
    return 0;
}