我的二叉数的递归遍历C++代码有问题 各位老师看看好吗

来源:百度知道 编辑:UC知道 时间:2024/06/25 12:55:06
#include <iostream.h>
class BiTree
{
private:
BiTree *lc,*rc;
char data;
public:
void Creat_BiTree(BiTree *);
void Show_BiTree(BiTree *);
};
void BiTree::Creat_BiTree(BiTree *T)
{
char ch;
cin>>ch;
if(ch=='*') T=NULL;
else
{
T=new BiTree;
T->data=ch;
Creat_BiTree(T->lc);
Creat_BiTree(T->rc);
}
}
void BiTree::Show_BiTree(BiTree *T)
{
if(T!=NULL)
{
Show_BiTree(T->lc);
cout<<T->data<<endl;
Show_BiTree(T->rc);
}
//cout<<"1"<<endl;

}
void main()
{
BiTree s;
BiTree *T;
//T=new BiTree;
s.Creat_BiTree(T);
s.Show_BiTree(T);

}
不好意思我的积分不多啊 看看吧 谢谢了
呵呵 别介意 再问一下 什么是操作自己的实例的成员!有点不懂?

你的Show_BiTree没有递归跳出;应该在调用开始先检查是否是叶子节点,是叶子节点就返回了,要不然肯定会访问到空指针。
还有给你提个意见:C++类的封装性体现在信息屏蔽,你的这个类没有操作自己的实例的成员,反而去操作别人的;这样做还不如用C效率高些.

修改:你在Creat_BiTree里new过之后,把左右子树指针都置成空;然后把Show_BiTree 改成
if(T->lc) Show_BiTree(T->lc);
cout<<T->data<<endl;
if(T->rc) Show_BiTree(T->rc);
就行了

改过的程序:
#include <iostream.h>
class BiTree
{
private:
BiTree *lc,*rc;
char data;
public:
void Creat_BiTree(BiTree *&);
void Show_BiTree(BiTree *);
};
void BiTree::Creat_BiTree(BiTree *&T)
{
char ch;
cin>>ch;
if(ch != '*')
{
T=new BiTree;
T->lc = NULL;
T->rc = NULL;
T->data=ch;
Creat_BiTree(T->lc);
Creat_BiTree(T->rc);
}
}
void BiTree::Show_BiTree(BiTree *T)
{

if(T->lc) Show_BiTree(T->lc);
cout<<T->data<<endl;
if(T->rc