递归判断,若有不平衡,标记flag,平衡则返回左右子树重量和。
#includeint flag;int isBalanced() { int wl, dl, wr, dr; scanf("%d%d%d%d", &wl, &dl, &wr, &dr); if (!wl) wl = isBalanced(); if (!wr) wr = isBalanced(); if (wl * dl != wr * dr) { flag = 0; return 0; } else { return wl + wr; }}int main() { int cases; scanf("%d", &cases); while (cases--) { flag = 1; isBalanced(); if (flag) printf("YES\n"); else printf("NO\n"); if (cases) printf("\n"); } return 0;}