标题:请教一个有关树的问题!
只看楼主
ming528
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-4-9
 问题点数:0 回复次数:5 
请教一个有关树的问题!

请问大虾为什么构造树时要用“ *&“进行参数传递,为什么用”&" 就不行?多谢了!
如下是代码:
#include <iostream.h>
struct node
{
char data;
node * lchild,*rchild;
};
struct element
{
node *ptr;
int flag;
};
class tree
{
public :
tree (); //构造函数
~tree(); //析构函数
node *getroot () { return root;}
void creattree(node *&root); //构造树
void postorder(node *root); //后序遍历非递归算法
void release(node *r) ; //析造树
private:
node * root;
};

tree::tree() //构造
{
cout <<"请输入各结点的数据:"<<endl;
creattree(root);
}

tree ::~tree () //析构
{
release( root);
}


void tree::creattree (node *& cr) //构造树
{
char ch;
cin>>ch;
if (ch=='#')
cr=NULL;
else
{
cr=new node ;
cr->data =ch;
creattree(cr->lchild);
creattree(cr->rchild);
}
}


void tree::release (node *re) // 析造树
{
if (re!=NULL)
{
release(re->lchild);
release (re->rchild);
delete re;
}
}


void tree::postorder (node *root)//后序遍历树
{
int top =-1;
element s[100];
while (root!=NULL||top!=-1)
{
while (root!=NULL)
{
top++;
s[top].ptr=root;
s[top].flag=1;
root =root ->lchild ;
}
while ( top!=-1&&s[top].flag==2)
{
root=s[top--].ptr;
cout <<root->data;
}
if (top!=-1)
{
s[top].flag=2;
root=s[top].ptr->rchild;
}
else
return ;
}
}
void main ()
{
tree tr;
cout <<" 后序遍历为:"<<endl;
tr.postorder (tr.getroot ());
}

搜索更多相关主题的帖子: void element include public 
2007-05-16 18:21
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
得分:0 
void tree::creattree (node *cr) //构造树
{
char ch;
cin>>ch;
if (ch=='#')
cr=NULL;
else
{
cr=new node ;
cr->data =ch;
creattree(cr->lchild);
creattree(cr->rchild);
}
}
应该是把“&”删掉就可以了。

人生重要的不是所站的位置,而是所朝的方向
2007-05-17 01:37
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
因为void tree::creattree (node *cr)对root调用后,root的值仍然没有改变,那么他还是不知道指向什么东西。还是一开始的未定义。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-05-17 08:33
herbert_1987
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:1314
专家分:0
注 册:2007-5-13
得分:0 
上楼说得对,我试过 creattree (node *& cr)是可以的,问题可能在于
postorder ()函数

人生重要的不是所站的位置,而是所朝的方向
2007-05-17 15:35
leilinghua
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-25
得分:0 

如果你想想无参函数,在函数体中定义cr,然后再返回cr就可以了


潜心学习。。。。。 Q群:C&&C++ Lovers 39951868
2007-05-17 19:03
ming528
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-4-9
得分:0 
多谢了,大家!
2007-05-17 21:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-139947-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.586809 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved