m0_73380912 2022-08-24 22:35 采纳率: 0%
浏览 82
已结题

二叉树的创建中遇到问题

问题遇到的现象和发生背景

代码能运行,但是最后崩溃了,挂掉了。
问题背景是我想创建一个二叉树并前序中序递归遍历打印并最后释放所有空间。

问题相关代码,请勿粘贴截图

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}bitnode;

void createtree(bitnode **T)
{
assert(*T);
char ch;
scanf("%c", &ch);

while (getchar() != '\n');
if (ch == '#')
    *T = NULL;
else
{
    *T = (bitnode*)malloc(sizeof(bitnode));
    (*T)->data = ch;
    createtree(&((*T)->lchild));
    createtree(&((*T)->rchild));
}

}

void 前序遍历(bitnode **T)
{
if (*T == NULL)
{
return;
}
printf("%d ", (*T)->data);
前序遍历(&((*T)->lchild));
前序遍历(&((*T)->rchild));
}

void 中序遍历(bitnode **T)
{
if (*T == NULL)
{
return;
}
中序遍历(&((*T)->lchild));
printf("%d ", (*T)->data);
中序遍历(&((*T)->rchild));
}

void 释放内存空间(bitnode** T)
{
if (*T == NULL)
{
return;
}
/bitnode cur = T;/
while (T != NULL)
{
释放内存空间(&((*T)->lchild));
释放内存空间(&((*T)->rchild));
free(T);
}

}

int main()
{
bitnode * T;
/T->lchild = NULL;
T->rchild = NULL;
/
/bitnode * p = T;/
printf("先序递归创建\n");
createtree(&T); //这里传入指针的地址
前序遍历(&T);
中序遍历(&T);
释放内存空间(&T);
return 0;
}

运行结果及报错内容

最后出来一个框

img

我的解答思路和尝试过的方法

怎么着都不行了

我想要达到的结果

不想程序崩溃。正确运行应该怎样改代码?

我编辑的时候看着好好的,一发出来全都挤在一块我也不知道该怎么办了,劳烦大家废废眼睛了,谢谢大家。

  • 写回答

4条回答 默认 最新

  • 快乐鹦鹉 2022-08-25 04:32
    关注
    获得1.80元问题酬金

    释放的循环也应该针对*T,而不是T

    评论

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 修改了问题 8月24日
  • 修改了问题 8月24日
  • 修改了问题 8月24日
  • 展开全部