uva_839_Not so Mobile

简单的建树,然后遍历
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef struct BTREENODE_ {
        int lw, ld, rw, rd;
        struct BTREENODE_ *left_child;
        struct BTREENODE_ *right_child;
}BTREENODE;

int flag;

void build_binary_tree(BTREENODE **node)
{
        (*node) = new BTREENODE; (*node)->left_child = (*node)->right_child = NULL;
        scanf("%d %d %d %d", &(*node)->lw, &(*node)->ld, &(*node)->rw, &(*node)->rd);
        if( !(*node)->lw ) {
                build_binary_tree(&(*node)->left_child);
        }
        if( !(*node)->rw ) {
                build_binary_tree(&(*node)->right_child);
        }
}

int is_equilibrium(BTREENODE *node)
{
        if( !flag ) {
                return -1;
        }
        node->lw = (node->lw)? node->lw : is_equilibrium(node->left_child);
        node->rw = (node->rw)? node->rw : is_equilibrium(node->right_child);
        if( node->lw*node->ld != node->rw*node->rd ) {
                flag = 0;
        }
        return node->lw+node->rw;
}

int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
        freopen("test.in", "r", stdin);
#endif
        int cas;
        BTREENODE *root;
        scanf("%d", &cas);
        for(int i = 0; i < cas; i ++) {
                build_binary_tree(&root);
                flag = 1; is_equilibrium(root);
                if( i ) {
                        printf("\n");
                }
                if( flag ) {
                        printf("YES\n"); continue;
                }
                printf("NO\n");
        }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值