一道C++中有关stack flow的程序需要修改

来源:百度知道 编辑:UC知道 时间:2024/06/28 07:38:46
#include<iostream>
#include"TreeNode.h"
using namespace std;
class Tree
{
public:
BtreeNode *root;

Tree(char *ch);
~Tree();
void destroy(BtreeNode *p);
BtreeNode *createtree(char *ch);
void XianxuBianli();
void ZhongxuBianli();
void HouxuBianli();
};
Tree::Tree(char *ch)
{
root=NULL;
if(ch!=" ")
{
cout<<"建立一棵二叉树:"<<endl;
root=createtree(ch);
cout<<ch<<endl;
}
}
Tree::~Tree()
{
destroy(root);
root=NULL;
cout<<endl;
}
void Tree::destroy(BtreeNode *p)
{
if(p!=NULL)
{
destroy(p->left);
destroy(p->right);
cout<<p->data<<" ";
delete p;
}
}
BtreeNode* Tree::createtree(char *ch)
{
BtreeNode *p=

这个程序其实没有什么大问题,只是你在使用字符串的时候没有判断其是否已经结束。
BtreeNode* Tree::createtree(char *ch)
{
BtreeNode *p=NULL;
static int i=0;
// 这一行是关键
if (ch[i] == '\0')
return NULL;

if(ch[i]!='.')
{
p=new BtreeNode(ch[i]);
i++;
p->left=createtree(ch);
p->right=createtree(ch);
}
else
{
i++;
}

return p;

}