题目大意: 给出树和广义表,求是否存在叶节点到根节点的和与该数字相等叶节点
解题思路:递归调用,创建一个函数读取空格和左右括号,创建一个递归函数来判断该节点下面的节点是否符合要求,该函数首先读取一个数字,然后读取字符,如果没有数字的话,就会读取到右括号,则表示该节点内没有值,则传进来的表示是否还有节点的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;
}