首页 新闻 会员 周边 捐助

九度OJ runtime error问题

0
悬赏园豆:20 [待解决问题]

问题:http://ac.jobdu.com/problem.php?pid=1009

代码如下,本地没问题,提交总是runtime error

#include <iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;

struct BST
{
    int val;
    BST(int v=0):val(v),lef(0),rig(0){} //使用默认实参,等同于加了默认构造函数
    BST *lef;
    BST *rig;
};
//通过插入建立二叉搜索树
void insert(BST *p,BST *i)
{
    BST *p_f;
    while(p!=0)
    {
        p_f=p;
        if (p->val>i->val)
        {
            p=p->lef;
        }
        else
        {
            p=p->rig;
        }
    }
    if (p_f->val>i->val)
    {
        p_f->lef=i;
    }
    else
    {
        p_f->rig=i;
    }
}
//修改递归遍历算法判断两个二叉树是否相同
bool comp(BST *b1,BST *b2)
{
    //二叉树结构不同或任意节点值不同都要返回false
    bool res=true;
    if (b1->val!=b2->val)
    {
        return false;
    }
    if ((b1->lef!=0)||(b2->lef!=0))
    {
        if ((b1->lef!=0)&&(b2->lef!=0))
        {
            res=comp(b1->lef,b2->lef);
        }
        else
        {    
            return false;
        }
    }
    if ((b1->rig!=0)||(b2->rig)!=0)
    {
        if ((b1->rig!=0)&&(b2->rig)!=0)
        {
            res=comp(b1->rig,b2->rig);
        }
        else
        {
            return false;
        }
    }
    return res;
}
//将输入转化为二查搜索树,返回根节点指针
BST * convert_to_bst(int val)
{
    BST *b;
    stack<int> stk;
    while(val!=0)
    {
        stk.push(val%10);
        val=val/10;
    }
    b=new BST(stk.top());
    stk.pop();
    while(!stk.empty())
    {
        insert(b,new BST(stk.top()));
        stk.pop();
    }
    return b;
}

int main()
{
    int num;
    vector<vector<string> > result; //存储结构使用容器,使用指针数组还要单独存储数组长度,太麻烦!
    vector<string> res;  
    while(cin>>num&&num!=0)
    {
        int *p=new int[num+1];  
        BST **b=new BST*[num+1];  //BST必须有默认构造函数
        //将二叉树根节点指针存入指针数组
        for (int i=0;i!=num+1;++i)
        {
            cin>>p[i];
            b[i]=convert_to_bst(p[i]);
        }
        delete[] p;

        //判断,结果存入result容器
        for (int j=1;j!=num+1;++j)
        {
            bool r=comp(b[0],b[j]);
            if (r)
            {
                res.push_back("YES");
            }
            else
                res.push_back("NO");
        }

        for (int s=0;s!=num+1;++s)
        {
            delete b[s];
        }
        delete[] b;
        result.push_back(res);
        res.clear();
    }
    //输出结果
    for (vector<vector<string> >::iterator iter=result.begin();iter!=result.end();++iter)
    {
        for (vector<string>::iterator it=iter->begin();it!=iter->end();++it)
        {
            cout<<*it<<endl;
        }
    }
}
leowww的主页 leowww | 初学一级 | 园豆:127
提问于:2013-10-25 12:44
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册