求救:二叉树的创建及先序遍历(C++)

来源:百度知道 编辑:UC知道 时间:2024/06/08 20:39:31
我是菜鸟,请高手指教下面程序那里错了:
头文件"BiTree"
#include<iostream>
using namespace std;

class TNode{
public:
char key;
TNode *lchild;
TNode *rchild;
};

class BiTree{
public:
BiTree(){
root=0;
}
TNode *CreateTree(TNode *T);
void preorder(TNode *T);
private:
TNode *root;
};

TNode *BiTree::CreateTree(TNode *T){
char ch;
ch=getchar();
if(ch==' '){
T=NULL;
}
else{
T=new TNode;
T->key=ch;
T->lchild=CreateTree(T->lchild);
T->rchild=CreateTree(T->rchild);
}
return T;
}
void BiTree::preorder(TNode *T){
if(T!=NULL)
cout<<T->key;
preorder(T->lchild);
preorder(T->rchild);
}
*****************************************
源文件"BiTree.cpp"
#include<iostream>
#include"BiTree.h"

void BiTree::preorder(TNode *T){
if(T!=NULL)
cout<<T->key;
preorder(T->lchild);
preorder(T->rchild);
}
这句如果T为空,还引用T->lchild,这就造成内存错误,改为
void BiTree::preorder(TNode *T){
if(T==NULL)return;
cout<<T->key;
preorder(T->lchild);
preorder(T->rchild);
}
/////////////////////////////////////////////////
没可能吧,这个程序写过不知道多少遍了~