问题: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; } } }