C语言 改变结构体成员的值遇到问题

建立二叉排序树删除第i个结点后输出二叉排序树,我删除结点后后要修正每个结点的高度,VC6总是提示我AccessViolation原因是什么该怎么改?typedefstru... 建立二叉排序树 删除第i个结点后 输出二叉排序树,我删除结点后后要修正每个结点的高度,VC6总是提示我 Access Violation 原因是什么 该怎么改?
typedef struct BTNode //定义树结点,data记录数据 level记录当前节点的高度 num记录是第几个输入的
{
int data;
int level;
int num;
struct BTNode *Lchild, *Rchild;
}*BTree;

void changeh(BTree T)//利用层次遍历修正高度
{
BTree Q[N];
int f=-1,r=0,a[N];
Q[r]=T;
Q[r]->level=1;
while(f!=r)
{
f++;
if(Q[f]->Lchild!=NULL)
{
r++;
Q[r]=Q[f]->Lchild;
Q[r]->level=Q[r]->level+1;//提示这里有错,我想把结点的高度重新设置为父节点的高度+1
}
if(Q[f]->Rchild!=NULL)
{
r++;
Q[r]=Q[f]->Rchild;
Q[r]->level=Q[f]->level+1;
}
}
}
#define N 20 //生成的数量,不好意思之前写掉了
展开
 我来答
匿名用户
2015-12-07
展开全部
void changeh(BTree T)/*传递了一个结构体形参,实际上你下面用了一个数组只存储了一个头节点,想对二叉树的高度进行更新并不能起到作用*/
{
BTree Q[N]; //N值要确定
int f=-1,r=0,a[N];
Q[r]=T; //将头节点给了数组
Q[r]->level=1;
while(f!=r)
{
f++;
if(Q[f]->Lchild!=NULL)
{
r++; //这里加了1,因为数组没有初始化,指针指向不确定了位置
Q[r]=Q[f]->Lchild;
Q[r]->level=Q[r]->level+1;//这里要对一个不确定的内存空间访问或者改变值,出错,
//可能就是空指针错误
//下面问题相同
}
if(Q[f]->Rchild!=NULL)
{
r++;
Q[r]=Q[f]->Rchild;
Q[r]->level=Q[f]->level+1;
}
}
}
追问
不好意思我贴掉了N的定义
#define N 20

然后a[N]忘了删除没有实际意义。
我写的BTree T 中的T就是根节点。
所以我觉得 数组Q是成功初始化了,应该不是这个问题,不好意思请您再看看。
追答
Q[r]=T;//语句只初始化了头节点,其他的节点很可能不是一个连续的空间,怎么可能初始化
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式