UVA - 112 Tree Summing

来源:互联网 发布:刷微信红包软件 编辑:程序博客网 时间:2024/05/18 00:52

 题目大意:  给出树和广义表,求是否存在叶节点到根节点的和与该数字相等叶节点

解题思路:递归调用,创建一个函数读取空格和左右括号,创建一个递归函数来判断该节点下面的节点是否符合要求,该函数首先读取一个数字,然后读取字符,如果没有数字的话,就会读取到右括号,则表示该节点内没有值,则传进来的表示是否还有节点的leaf变为true,表示该节点为空,然后在读取一个括号,判断该节点下的右节点是否有符合的叶节点,如果左右节点都为空了,则判断sum是否和当前节点的值相等,如果相等,则将标记位变成true,表示找到了该叶节点

#include<cstdio>char get() {char temp ;temp = getchar();while(temp == ' ' || temp == '\n')temp = getchar();return temp;}bool judge(int sum, bool *leaf) {bool left =false, right = false, end = false;char temp;int num;scanf("%d", &num);temp = get();if(temp == '(') {if(judge(sum - num,&left))end = true;temp = get();if(judge(sum - num,&right))end = true;temp = get();if(right && left)end = (sum == num);}else*leaf = true;return end;}int main() {int num;char temp;bool leaf = false;while(scanf("%d", &num) != EOF) {temp = get();judge(num,&leaf)?printf("yes\n"):printf("no\n");}return 0;}


0 0