题意:求一棵二叉树是否平衡。平衡的定义是每个树的w1*d1 == w2*d2,如果有子树,那么它的w为子树的w1+w2。
思路:直接递归模拟建树过程求解。
#include <iostream>
using namespace std;
int DFS();
int flag;
int main()
{
int cases;
scanf("%d", &cases);
while (cases--)
{
flag = 1;
DFS();
if(flag)
printf("YES\n");
else
printf("NO\n");
if(cases)
printf("\n");
}
return 0;
}
int DFS()
{
int w1, d1, w2, d2;
scanf("%d%d%d%d", &w1, &d1, &w2, &d2);
if(w1 == 0)//搜左孩子
w1 = DFS();
if(w2 == 0)//搜右孩子
w2 = DFS();
if(w1 * d1 != w2 * d2)
flag = 0;
return w1 + w2;//返回重量
}