大家帮忙看下菜鸟写的二叉树哪错了 程序如下
#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); 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();}//只跟你把崩毁的地方修改了一下,我晚上回去再给你看一下。
[解决办法]
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* 型指针的地址做参数……
[解决办法]
// sa.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#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; return; } else { r=new node; if(r==NULL) return; 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;}node* getroot(){ return root;}void midtree(node *r)//中序遍历{ if(r!=NULL) { midtree(r->left); cout<<r->data; midtree(r->right); }}};int main(){ btree bt; node *nod=NULL;//防止成为野指针; cout<<"pless input the infomation of the node:"<<endl; bt.great(nod); cout<<"中序遍历:"<<endl; bt.midtree(nod); cout<<endl; getchar();}