第一次做二叉树的题,参考了某大神的代码,充分领略到大神递归的境界,光研究他的代码就花了好几个小时,还看了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; }