#include <stdio.h>
#include <malloc.h>
typedef char Elemtype;
typedef int status;
//二叉树的存储表示
typedef struct node
{ Elemtype data;
struct node *lchild,*rchild;
}*Bitree,BiTNode;
void CreateBiTree (Bitree T) //按先序遍历次序输入结点的值
{ Elemtype ch;
scanf("%c",&ch);
if(ch=='/') T=NULL;
else
{ if(T=(BiTNode *)malloc(sizeof(BiTNode)))
T->data=ch;
CreateBiTree (T->lchild);
CreateBiTree (T->rchild);
}
}
void PreOrderTraverse(Bitree T)
{ if(T)
{printf("%c ",T->data); PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);
}}
void InOrderTraverse(Bitree T)
{ if(T)
{ InOrderTraverse(T->lchild); printf("%c ",T->data) ;InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(Bitree T)
{ if(T!=NULL)
{ PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c ",T->data);
}
}
void main()
{ Bitree T;
CreateBiTree(T);PreOrderTraverse(T);InOrderTraverse(T); PostOrderTraverse(T);
}
创建二叉树出问题,求各位大侠帮忙看看! #include <stdio.h> #include <malloc.h> typedef char Elemtype
答案:1 悬赏:40
解决时间 2021-02-06 16:55
- 提问者网友:敏感魔鬼
- 2021-02-05 21:03
最佳答案
- 二级知识专家网友:何必打扰
- 2021-02-05 21:09
在CreateBitTree时传入参数时,如果传入的是Bitree,那就要确保其非NULL。
如果可能传入NULL(按照你的代码,可以肯定是传入NULL),并在CreateBitTree里分配内存,必须传入一个Bitree的指针或引用。否则你分配的新节点将仅仅被当前形参T所指向,而不被父节点的lchild或者rchild指向。
简单地修改是,将CreateBiTree (Bitree T) 改成CreateBiTree (Bitree &T)
如果是纯C,那么改成CreateBiTree (Bitree *T)然后函数体中用到T的都改成(*T)
如果可能传入NULL(按照你的代码,可以肯定是传入NULL),并在CreateBitTree里分配内存,必须传入一个Bitree的指针或引用。否则你分配的新节点将仅仅被当前形参T所指向,而不被父节点的lchild或者rchild指向。
简单地修改是,将CreateBiTree (Bitree T) 改成CreateBiTree (Bitree &T)
如果是纯C,那么改成CreateBiTree (Bitree *T)然后函数体中用到T的都改成(*T)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯