返回信息流请问一下,为什么两个函数的 参数 BinTree &T改为 BinTree T(即不用引用就不能用了)
BinTree本身不是个指针吗?
改为指针怎么改?
using namespace std;
typedef struct BinTNode{
char data;
struct BinTNode *lchild,*rchild;
}BinTNode,*BinTree;
char Array[]={'-','+','a','x','x','*','b','x','x','-','c','x','x','d','x','x','/','e','x'
,'x','f','x','x'};
int i=0;
void CreateBinTree (BinTree &T)
{ // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身
char ch;
ch=Array[i++];
//cout<<ch<<endl;
if(ch=='x')
T=NULL ;// 读人空格,将相应指针置空
else{ // 读人非空格
T=(BinTree)malloc(sizeof(BinTNode)) ; // 生成结点
T->data=ch ;
CreateBinTree(T->lchild) ; // 构造左子树
CreateBinTree(T->rchild) ; // 构造右子树
}
}
void InOrderTraverse (BinTree &T)
{ // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身
if(T)
{
cout<<T->data;
InOrderTraverse(T->lchild) ; // 构造左子树
InOrderTraverse(T->rchild) ; // 构造右子树
}
}
void main()
{
BinTree tree;
tree=NULL;
CreateBinTree (tree);
InOrderTraverse(tree);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #14354同步于 2008/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于引用与指针的问题
lodas
2008/10/19镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
自己改成功了
太imba了 还是引用好,用指针,程序的可读性非常差。
#include <iostream>
using namespace std;
typedef struct BinTNode{
char data;
struct BinTNode *lchild,*rchild;
}BinTNode,*BinTree;
char Array[]={'-','+','a','x','x','*','b','x','x','-','c','x','x','d','x','x','/','e','x'
,'x','f','x','x'};
int i=0;
void CreateBinTree (BinTree *T)
{ // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身
char ch;
ch=Array[i++];
//cout<<ch<<endl;
if(ch=='x')
*T=NULL ;// 读人空格,将相应指针置空
else{ // 读人非空格
*T=(BinTree)malloc(sizeof(BinTNode)) ; // 生成结点
(*T)->data=ch ;
CreateBinTree(&(*T)->lchild) ; // 构造左子树
CreateBinTree(&(*T)->rchild) ; // 构造右子树
}
}
void InOrderTraverse (BinTree *T)
{ // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身
if(*T)
{
cout<<(*T)->data;
InOrderTraverse(&(*T)->lchild) ; // 构造左子树
InOrderTraverse(&(*T)->rchild) ; // 构造右子树
}
}
void main()
{
BinTree tree;
tree=NULL;
CreateBinTree (&tree);
InOrderTraverse(&tree);
}