UVa699为什么会Runtime Error啊多谢
UVa699为什么会Runtime Error啊?谢谢
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=8&problem=640&mosmsg=Submission+received+with+ID+13332891
------解决方案--------------------
因为你一直leftmost child出来的不一定是整个树的最左端。
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=8&problem=640&mosmsg=Submission+received+with+ID+13332891
#include <iostream>
using namespace std;
bool flag=false;
const int maxsize = 100;
int maxNum,minNum;
struct Tree
{
int data;
Tree *lchild,*rchild;
};
Tree *build()//建树
{
int x;
cin>>x;
if(x==-1)
return NULL;
flag=true;
Tree *p=new Tree;
p->data=x;
p->lchild=build();
p->rchild=build();
return p;
}
int Count_lm(Tree *root)//找最左边那个节点
{
Tree *p=root;
int num=1;
while(p)
{
p=p->lchild;
++num;
}
return num;
}
void pre(Tree *root,int n,int *p)//求结果
{
if(root)
{
*(p+n)+=root->data;
if(n>maxNum)
maxNum=n;
if(n<minNum)
minNum=n;
pre(root->lchild,n-1,p);
pre(root->rchild,n+1,p);
}
}
int main()
{
int cas=1,i;
while (true)
{
flag=false;
Tree *root=build();
if(flag==false)
break;
int left_most=Count_lm(root);
int pile[maxsize]={0};
maxNum=-1;
minNum=100000;
pre(root,left_most+1,pile);
cout<<"Case "<<cas++<<":"<<endl;
for(i=minNum;i<maxNum;++i)
cout<<pile[i]<<" ";
cout<<pile[i]<<endl<<endl;
}
return 0;
}
------解决方案--------------------
因为你一直leftmost child出来的不一定是整个树的最左端。