问题图片
源代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef char BiElemType;
typedef struct BiTNode
{
BiElemType c;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode, * BiTree;
typedef struct tag
{
BiTree p;
struct tag* pnext;
}tag_t, * ptag_t;
void preOrder(BiTree p)
{
if (NULL != p)
{
putchar(p->c);
}
preOrder(p->lchild);
preOrder(p->rchild);
}
int main()
{
char c;
BiTree tree=NULL;
BiTree pnew;
ptag_t ptail = NULL, phead = NULL, Listpnew=NULL, pcur = NULL;//出现不能从 int 转到 tag 原因没有给ptag_t加指针
while (scanf("%c", &c) != EOF)
{
if (c == '\n')
{
break;
}
pnew = (BiTree)calloc(1, sizeof(BiTNode));
pnew->c = c;
Listpnew = (ptag_t)calloc(1, sizeof(tag_t));
Listpnew->p = pnew;
if (tree == NULL)
{
tree = pnew;
ptail = Listpnew;
phead = Listpnew;
pcur = Listpnew;
continue;
}
else {
ptail->pnext = Listpnew;
ptail = Listpnew;
}
if (pcur->p->lchild==NULL)
{
pcur->p->lchild = pnew;
}
else if (pcur->p->rchild == NULL)
{
pcur->p->rchild = pnew;
pcur = pcur->pnext;
}
}
printf("------前序遍历------\n");
preOrder(tree);
}
以解决 把
preOrder(p->lchild);
preOrder(p->rchild);
放在 putchar(p->c); 里面就好了
意思就是p出现空指针现象了
pnew = (BiTree)calloc(1, sizeof(BiTNode));
pnew->c = c;
pnew->lchild = NULL;
pnew->rchild = NULL;
你循环调用 没设置终止条件! 加个判空