sure_fire_ 2022-04-03 11:07 采纳率: 100%
浏览 31
已结题

二叉树层序建树-报错:pcur 是 nullptr。想问问是为什么

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef char BiElemType;
typedef struct BiNode {
BiElemType data;
struct BiNode* lchild;
struct BiNode* rchild;
}bi,BiTree;
typedef BiTree ElemType;
typedef struct tag {
BiTree p;
struct tag
pnext;
}tag_t,*ptag_t;
void PreOrder(BiTree p) {
if (p!= NULL) {
putchar(p->data);
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}
void InOrder(BiTree p) {
if (p != NULL) {

    InOrder(p->lchild);
    putchar(p->data);
    InOrder(p->rchild);
}

}
void LaOrder(BiTree p) {
if (p != NULL) {

    LaOrder(p->lchild);

    LaOrder(p->rchild);
    putchar(p->data);
}

}

typedef struct LinkNode {
ElemType data;
struct LinkNode* next;
}ln;
typedef struct {
ln* front, * rear;
}qu,Queue;
void QueueInit(qu&q) {
q.front = q.rear = (ln
)malloc(sizeof(ln));
q.front->next = NULL;
}
bool Isempty(qu q) {
if (q.front == q.rear) {
return true;
}
return false;
}
void EnQueue(qu& q, ElemType x) {
ln* s = (ln*)malloc(sizeof(ln));
s->data = x;
s->next = q.rear->next;
q.rear->next = s;
q.rear = s;
q.rear->next = NULL;
}
bool DeQueue(qu& q, ElemType& x) {
if (q.front == q.rear) {
return false;
}
ln* p = q.front->next;
x = p->data;
p->next = q.front->next;
if (q.rear == p) {
q.front = q.rear;
}
free(p);
return true;
}
void LevelOrder(BiTree t) {
qu q;
QueueInit(q);
BiTree p;
EnQueue(q, t);//树根入队
while (!Isempty(q))
{
DeQueue(q, p);//出队当前结点并打印
putchar(p->data);
if (p->lchild != NULL)
EnQueue(q, p->lchild);
if (p->rchild != NULL)
EnQueue(q, p->rchild);
}
}

int main() {
BiTree pnew;
BiTree tree = NULL;
char x;
ptag_t pfront = NULL, prear = NULL, listpnew = NULL, pcur =NULL;
while (scanf("%d", &x)!=EOF) {
if (x =='\n') {
break;
}
pnew = (BiTree)calloc(1, sizeof(bi));
pnew->data = x;
listpnew = (ptag_t)calloc(1, sizeof(tag_t));
listpnew->p = pnew;
if (tree == NULL) {
tree = pnew;
pfront = listpnew;
prear = listpnew;
continue;
}
else {
prear->pnext = listpnew;
prear = listpnew;
}
if (NULL==pcur->p->lchild) {//就是这里!
pcur->p->lchild = pnew;
}
else if (pcur->p->rchild == NULL) {
pcur->p->rchild = pnew;
pcur=pcur->pnext ;
}
}
PreOrder(tree);
InOrder(tree);
LaOrder(tree);
LevelOrder(tree);
}

img

  • 写回答

1条回答 默认 最新

  • 昂格莱德 2022-04-03 23:57
    关注

    pcur是空指针

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置