现在的位置: 首页 > 综合 > 正文

UVa 112 – Tree Summing

2012年08月13日 ⁄ 综合 ⁄ 共 695字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.