大家帮忙看上初学者写的二叉树哪错了 程序如上
大家帮忙看下菜鸟写的二叉树哪错了 程序如下
#include<iostream>
using namespace std;
struct node
{
int data;
node *left;
node *right;
node():left(NULL),right(NULL)
{
data=0;
}
};
class btree
{
private:
node *root;
public:
btree():root(NULL)
{}
void great(node *r)
{
int num;
cout<<"输入节点信息:"<<endl;
cin>>num;
if(num==0)
r=NULL;
else
{
r=new node;
if(r==NULL)
exit(1);
r->data=num;
great(r->left);
great(r->right);
}
root=r;
}
~btree()
{
destroy(root);
}
void destroy(node *r)
{
if(r!=NULL)
{
destroy(r->left);
destroy(r->right);
delete r;
}
root=NULL;
}
void pretree(node *r)//前序遍历
{
if(r!=NULL)
{
cout<<r->data;
pretree(r->left);
pretree(r->right);
}
}
node* getroot()
{
return root;
}
void midtree(node *r)//中序遍历
{
if(r!=NULL)
{
midtree(r->left);
cout<<r->data;
midtree(r->right);
}
}
void lasttree(node *r)//后序遍历
{
if(r!=NULL)
{
midtree(r->left);
midtree(r->right);
cout<<r->data;
}
}
};
int main()
{
btree bt;
node *nod;
cout<<"pless input the infomation of the node:"<<endl;
bt.great(nod);
cout<<"中序遍历:"<<endl;
bt.midtree(bt.getroot());
getchar();
}
------解决方案--------------------
#include<iostream>
using namespace std;
struct node
{
int data;
node *left;
node *right;
node():left(NULL),right(NULL)
{
data=0;
}
};
class btree
{
private:
node *root;
public:
btree():root(NULL)
{}
void great(node *r)
{
int num;
cout<<"输入节点信息:"<<endl;
cin>>num;
if(num==0)
r=NULL;
else
{
r=new node;
if(r==NULL)
exit(1);
r->data=num;
great(r->left);
great(r->right);
}
root=r;
}
~btree()
{
destroy(root);
}
void destroy(node *r)
{
if(r!=NULL)
{
destroy(r->left);
destroy(r->right);
delete r;
}
root=NULL;
}
void pretree(node *r)//前序遍历
{
if(r!=NULL)
{
cout<<r->data;
pretree(r->left);
pretree(r->right);
}
}
node* getroot()
{
return root;
}
void midtree(node *r)//中序遍历
{
if(r!=NULL)
{
midtree(r->left);
cout<<r->data;
midtree(r->right);
}
}
void lasttree(node *r)//后序遍历
{
if(r!=NULL)
{
midtree(r->left);
midtree(r->right);
cout<<r->data;
}
}
};
int main()
{
btree bt;
node *nod;
cout<<"pless input the infomation of the node:"<<endl;
bt.great(nod);
cout<<"中序遍历:"<<endl;
bt.midtree(bt.getroot());
getchar();
}
------解决方案--------------------
- C/C++ code
#include<iostream> using namespace std; struct node { int data; node *left; node *right; node():left(NULL),right(NULL) { data=0; } }; class btree { private: node *root; public: btree():root(NULL) {} void great(node *r) { int num; cout<<"输入节点信息:"<<endl; cin>>num; if(num==0) r=NULL; else { r=new node; if(r==NULL) exit(1); cout<<"请输入数据: "<<endl; r->data=num; great(r->left); great(r->right); } root=r; } ~btree() { destroy(root); } void destroy(node *r) { if(r!=NULL) { destroy(r->left); destroy(r->right); delete r; } root=NULL; } void pretree(node *r)//前序遍历 { if(r!=NULL) { cout<<r->data; pretree(r->left); pretree(r->right); } } node* getroot() { return root; } void midtree(node *r)//中序遍历 { if(r!=NULL) { midtree(r->left); cout<<r->data; midtree(r->right); } } void lasttree(node *r)//后序遍历 { if(r!=NULL) { midtree(r->left); midtree(r->right); cout<<r->data; } } }; int main() { btree bt; node *nod=NULL;//防止成为野指针; cout<<"pless input the infomation of the node:"<<endl; bt.great(nod); cout<<"中序遍历:"<<endl; bt.midtree(bt.getroot()); getchar(); } //只跟你把崩毁的地方修改了一下,我晚上回去再给你看一下。
------解决方案--------------------
- C/C++ code
void great(node *r) { int num; cout<<"输入节点信息:"<<endl; cin>>num; if(num==0) r=NULL; else { r=new node; if(r==NULL) exit(1); cout<<"请输入数据: "<<endl; r->data=num; great(r->left); great(r->right); } root=r; } ~btree() { destroy(root); }
------解决方案--------------------
直接传node *p 是不会改变*p参数的值的 所以引用 node* 型指针的地址做参数……