这道题直接通过递归计算,思路比较直观,如果树的节点是父节点,计算左右两个孩子节点的权重乘以重量进行判断就可以了。
唯一注意的是需要用两个if 判断wl 和wr
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <memory>
using namespace std;
bool flag = true;
int buildTree()
{
int wl, dl, wr, dr ,sl = 0, sr = 0;
cin >> wl>> dl>> wr>> dr;
if(!wl)
wl = buildTree();
if(!wr)
wr = buildTree();
if(wl * dl != wr * dr)
flag = false;
return wl + wr;
}
int main()
{
freopen("in.txt","r", stdin);
freopen("out.txt", "w", stdout);
int kasenum;
cin>>kasenum;
while(kasenum--)
{
flag = true;
buildTree();
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
if(kasenum)
cout<<endl;
}//while
return 0;
}