UVA 112 Tree Summing

来源:互联网 发布:网络蔬菜配送 编辑:程序博客网 时间:2024/06/02 00:57
#include <cstdio>char input() { //读取括号char temp = getchar();while (temp == ' ' || temp == '\n')temp = getchar();return temp;}bool judge(int sum, bool *leaf) {   bool real = false, left = false, right = false;//  real : 是否存在一条分支的所有结点的和等于sumint value;//  left : 是否左子结点为空   right : 是否右子结点为空scanf("%d", &value);char temp = input();if (temp == '(') { //判断是否有子结点if (judge(sum - value, &left))   //判断以左子结点为 root 的树, 是否存在一条分支的所有结点的和等于 sum - valuereal = true;temp = input(); //读取掉右括号if (judge(sum - value, &right))  //判断以右子结点为 root 的树, 是否存在一条分支的所有结点和等于 sum - valuereal = true;temp = input();if (left && right) //如果左子结点和右子结点都为空,则该结点是 leaf ,判断该 leaf 结点的值是否等于 sumreal = (sum == value);}else  //返回左子结点或右子结点为空*leaf = true;return real;}int main() {int num;bool leaf = false;while (scanf("%d", &num) != EOF) {input(); //读取掉第一个左括号judge(num, &leaf) ? printf("yes\n") : printf("no\n");}return 0;}


0 0