第一次做二叉树的题,参考了某大神的代码,充分领略到大神递归的境界,光研究他的代码就花了好几个小时,还看了cin.ignore(),cin.clear(),cin.fail()以及cin.sync()几个cin流的实质和妙用,完全连指针链表都没用只用递归就把此题给A掉了,受益不少啊~~~
代码如下:
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<string>
using namespace std;
int flag;
int t_sum(int n,int sum)
{
int data;
char c;
cin>>c; //输入左括号
cin>>data;
if(!(cin==0))
{
sum+=data;
int ok1=t_sum(n,sum); //左树
int ok2=t_sum(n,sum); //右树
if(!ok1&&!ok2&&!flag) //如果左右两树都为空,即是叶子,且flag还是0,那么对总和sum与n进行比较
if(sum==n) //若相等则将flag赋为1
flag=1;
cin>>c; //输入右括号
return 1;
}
else
{
cin.clear(); //清除错误
cin>>c;
return 0;
}
}
int main()
{
#ifdef test
freopen("sample.txt","r",stdin);
#endif
int n;
while(cin>>n)
{
flag=0;
t_sum(n,0);
cout<<(flag?"yes":"no")<<endl;
}
return 0;
}