题目大意:给出一棵树,求从根到叶子节点的和是否等于给定的值,只要有一个符合就输出yes,否则输出no。
解题思路:题目给出的是前序遍历,所以可以用递归输入。(根(左孩子)(右孩子))大概是这样的输入。我参考了别人的写法,不用建树的。自己想的话估计会建树,当初也先过用递归,可能还不太会用所以没成功。
#include<iostream>
#include<string.h>
using namespace std;
int ans;
char ch;
int data;
int sum(int s, int &flag) {
cin>>ch; //输入左括号
if(cin>>data != 0 ) { //输入数据成功
s += data;
int ok1 = sum(s, flag); //左子树
int ok2 = sum(s, flag); //右子树
if(!ok1 && !ok2 && !flag) //判断是否是叶子节点 并且还没有匹配成功过
if(s == ans)
flag = 1;
cin>>ch; //输入右括号
return 1;
}
else {
cin.clear(); //清除错误状态
cin>>ch; //输入右括号
return 0;
}
}
int main() {
while(cin>>ans != 0) {
int flag = 0;
sum(0, flag);
if(flag == 1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}