动态创建二叉树
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int temp; scanf("%d",&temp); if(temp) //我们假定输入的结点值不能为 0,即 0 表示空 {//如果 temp 非零的话,我们为其分配储存空间
(*t)=(BiTree)malloc(sizeoБайду номын сангаас(BiTNode)); if(!(*t))//若分配失败! {
exit(-1); } (*t)->data=temp; CreateBiTree(&((*t)->lchild)); //递归创建左子树 CreateBiTree(&((*t)->rchild)); //递归创建右子树 } else (*t)=NULL; }
typedef struct BiTNode {
int data; struct BiTNode * lchild,* rchild; }BiTNode,*BiTree;
void CreateBiTree(BiTree *t); void PreTraverseBTree(BiTree *t);
void CreateBiTree(BiTree *t) {
#include<stdio.h> #include<stdlib.h> #include<malloc.h> /*
创建链表二叉树,这里大家要注意三点 1,形参是个指向结构体变量的指针的指针,有关指针的指针的知识, 同学们可参考 c 语言有关教材,在这里前往不要写错 2,我们假定输入零表示该结点为空 3. 我们是以先序的顺序来创建二叉树的但问题是无论以先序还是中序或者后序, 我们都无法唯一确定该二叉树,解决的办法是“我们必须把那些节点为空的值 也以先序或是中序又或者是后序的顺序来输入,这样就可以唯一确定该二叉树了” */ //动态造二叉树
PreTraverseBTree(&((*t)->rchild)); } } }
int main(void) {
BiTree t; CreateBiTree(&t); PreTraverseBTree(&t); return 0; }
void PreTraverseBTree(BiTree *t )//先序遍历函数 {
if(NULL!= (*t)) {
printf("%c\n",(*t)->data);
if(NULL!= ((*t)->lchild)) {
PreTraverseBTree(&((*t)->lchild)); } if(NULL != ((*t)->rchild)) {
(*t)=(BiTree)malloc(sizeoБайду номын сангаас(BiTNode)); if(!(*t))//若分配失败! {
exit(-1); } (*t)->data=temp; CreateBiTree(&((*t)->lchild)); //递归创建左子树 CreateBiTree(&((*t)->rchild)); //递归创建右子树 } else (*t)=NULL; }
typedef struct BiTNode {
int data; struct BiTNode * lchild,* rchild; }BiTNode,*BiTree;
void CreateBiTree(BiTree *t); void PreTraverseBTree(BiTree *t);
void CreateBiTree(BiTree *t) {
#include<stdio.h> #include<stdlib.h> #include<malloc.h> /*
创建链表二叉树,这里大家要注意三点 1,形参是个指向结构体变量的指针的指针,有关指针的指针的知识, 同学们可参考 c 语言有关教材,在这里前往不要写错 2,我们假定输入零表示该结点为空 3. 我们是以先序的顺序来创建二叉树的但问题是无论以先序还是中序或者后序, 我们都无法唯一确定该二叉树,解决的办法是“我们必须把那些节点为空的值 也以先序或是中序又或者是后序的顺序来输入,这样就可以唯一确定该二叉树了” */ //动态造二叉树
PreTraverseBTree(&((*t)->rchild)); } } }
int main(void) {
BiTree t; CreateBiTree(&t); PreTraverseBTree(&t); return 0; }
void PreTraverseBTree(BiTree *t )//先序遍历函数 {
if(NULL!= (*t)) {
printf("%c\n",(*t)->data);
if(NULL!= ((*t)->lchild)) {
PreTraverseBTree(&((*t)->lchild)); } if(NULL != ((*t)->rchild)) {