读书人

大家帮忙看上初学者写的二叉树哪错了

发布时间: 2012-09-04 14:19:30 作者: rapoo

大家帮忙看下菜鸟写的二叉树哪错了 程序如下
#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* 型指针的地址做参数……


[解决办法]

C/C++ code
// 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();} 

读书人网 >C++

热点推荐