首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

地址、指针,二叉树,该如何处理

2012-06-04 
地址、指针,二叉树小弟对内存地址、指针之类的不是很懂,现在碰到个问题好像是地址错误之类的,我自己也弄了很

地址、指针,二叉树
小弟对内存地址、指针之类的不是很懂,现在碰到个问题好像是地址错误之类的,我自己也弄了很久,搞不清楚,来请教各位大侠!
  我弄的是一个二叉树的建立和遍历的小程序,简单代码如下:

#include<stdio.h>
#include<stdlib.h>

typedefstructNode
{
char data;
structNode * lchild;
struct Node * rchild;
}Btree;

void CreatBtree(Btree * root);
void Inorder(Btree * root);
void PreOrder(Btree * root);
void PostOrder(Btree * root);

void main()
{
Btree * root;
root=(Btree *)malloc(sizeof(Btree));

CreatBtree(root);
printf("中序遍历:\n");
Inorder( root);
printf("先序遍历:\n");
PreOrder(root);
printf("后序遍历:\n");
PostOrder(root);

}

void CreatBtree(Btree * root)
{
char n;
printf("输入数据: ");
fflush(stdin);
scanf("%c", &n);

if('*' == n)
{
root= NULL;
}
else
{
root=(Btree *)malloc(sizeof(Btree));
root->data=n;
CreatBtree( root->lchild);
CreatBtree( root->rchild);
}

}

void Inorder(Btree * root)
{
if(root != NULL)
{
Inorder( root->lchild);
printf(" %c ",root->data);
Inorder( root->rchild);
}

}

void PreOrder(Btree * root)
{
if(root != NULL)
{
printf("%c ",root->data);
PreOrder( root->lchild);
PreOrder(root->rchild);
}
}

void PostOrder(Btree * root)
{
if(root != root)
{
PreOrder(root->lchild);
PreOrder( root->rchild);
printf("%c ",root->data);
}
}

程序用到的是递归调用,运行时出现一个窗口提示,说的是某内存不能“read”!最开始我申明了一个指针root,当调试的时候root显示的值是存放指针的地址么?? 还有推荐一些学习地址指针方面的书, 呵呵,小弟谢谢各位打下了!

[解决办法]
形参不能改变实参的值,哪怕实参传的是指针。想要改变指针的值,可通过指向指针的指针。
[解决办法]
1楼正解,
要让其成功把void CreatBtree(Btree * root);改成void CreatBtree(Btree * &root);
[解决办法]

探讨

1楼正解,
要让其成功把void CreatBtree(Btree * root);改成void CreatBtree(Btree * &root);

[解决办法]
我也很讨厌那个不能read,write的错误。

热点排行