C++-二叉树的建立问题
typedef char ElemType;
//树结构
typedef struct tree
{
ElemType data;
struct tree * lchild;
struct tree * rchild;
unsigned int isOut; //专为后序遍历设置的,0为不需要被输出,1为需要被输出
}TreeNode,*Tree;
//创建树,以先序序列建立树
void CreateTree(Tree &t) //我说的指针引用在这
{
char ch;
scanf("%c",&ch);
if ( ch == '#' )
t = NULL;
else
{
t = (Tree)malloc(sizeof(TreeNode));
if ( !t )
{
printf("分配内存出错!");
return ;
}
t->data = ch;
CreateTree(t->lchild);
CreateTree(t->rchild);
}
}
//递归先序遍历
void PreOrder(Tree t)
{
if ( t )
{
printf("%c",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
//我不懂的地方在于为什么在创建树时 使用了指针的引用,它很神奇,竟然在创建树的函数中不给返回值,而且,当我去掉&时,程序编译通过,执行会异常终止!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我试着回答一下,如果不用引用,则是把一个指针所指的地址的值赋值给另一个指针的值,即这两个指针指向同一地址(均为空指针),然后被赋值的那个指针通过t = (Tree)malloc(sizeof(TreeNode));分配给了其它地址,而赋值的那个指针还是空,这样在建树的时候树根的左右孩纸指针均为空,建树不成功。如果传的是指针的引用,被赋值的指针相当于是赋值指针的一个别名,当别名所指的地址的值改变的时候,赋值的指针所指的地址值也会跟着改变这样就会建立一颗完整的树