小的C++初学者一枚,在做一个题目:给出preorder和inorder二叉树顺序,推出potorder顺序。目前程序已经写完,可是总是在运行时崩溃,不知哪里出了问题?
题目页面:http://wirelesslab.sjtu.edu.cn:8088/jol/problem.php?cid=1005&pid=0
...
#include
#include
#include
using namespace std;
int length;
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
void sort(char preorder, char *inorder, int length)
{
TreeNode node = new TreeNode;
node->elem = *preorder;
int rootIndex = 0;
for(;rootIndex < length; rootIndex++)
{
if(inorder[rootIndex] == *preorder)
break;
}
//Left
sort(inorder, preorder +1, rootIndex);
//Right
sort(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
cout<<node->elem<<endl;
delete node;
return;
}
int main()
{
int time;
scanf("%d", &time);
int count=0;
while(count < time)
{
string str;
char temp;
int i;
while((temp=cin.get())!='\n')
{
str +=temp;
}
length =str.length();
char* preorder = new char[length];
char* inorder = new char[length];
for(i = 0;i<length;i++)
{
preorder[i]=str[i];
}
for(i=0;i<length;i++)
{
scanf("%c", inorder[i]);
}
sort(preorder, inorder, length);
count++;
delete preorder;
delete inorder;
}
return 0;
}
node->elem = *preorder; 确定是这样的
一定是内存越界了,再检查代码,特别是指针
你的代码,是对内存的指针操作,一旦内存越界,自然就崩盘了 。
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
TreeNode node = new TreeNode;这句就出错了,要加上struct