#2
yuccn2020-12-13 23:06
|
1) 用C语言编程描述二叉树存储结构和遍历算法;
2) 编写程序,建立二叉树的存储结构-二叉链表;
3) 编写程序,实现二叉树的前序、中序和后序遍历;
4) 计算二叉树的深度和叶子结点个数。
程序代码:
#include<stdio.h>
#include<stdlib.h>
//二叉树的存储结构,一个数据域,两个指针域
typedef struct bitnode
{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
//二叉树的先序遍历
void preordertraverse(bitree t)
{
if(t==NULL)
return;
printf("%c",t->data);
preordertraverse(t->lchild);
preordertraverse(t->rchild);
}
//二叉树的中序遍历
void inordertraverse(bitree t)
{
if(t==NULL)
return;
inordertraverse(t->lchild);
printf("%c",t->data);
inordertraverse(t->rchild);
}
//二叉树的后序遍历
void postordertraverse(bitree t)
{
if(t==NULL)
return;
postordertraverse(t->lchild);
postordertraverse(t->rchild);
printf("%c",t->data);
}
void createbitree(bitree *t)
{
char ch;//输入结点的值(字符型)
scanf("%c",&ch);
if(ch=='#')
*t=NULL;
else
{
*t=(bitree)malloc(sizeof(bitnode));
if(!*t)
exit(-1);
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);
}
}
//二叉树的深度
int depth(bitree t)
{
int depthleft,depthright,depthval;
if(t)
{
depthleft=depth(t->lchild);
depthright=depth(t->rchild);
depthval=1+
(depthleft>depthright?depthleft:depthright);
}
else
depthval=0;
return depthval;
}
int main()
{
bitree t;
createbitree(&t);
preordertraverse(t);
inordertraverse(t);
postordertraverse(t);
depth(t);
return 0;
}
#include<stdlib.h>
//二叉树的存储结构,一个数据域,两个指针域
typedef struct bitnode
{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
//二叉树的先序遍历
void preordertraverse(bitree t)
{
if(t==NULL)
return;
printf("%c",t->data);
preordertraverse(t->lchild);
preordertraverse(t->rchild);
}
//二叉树的中序遍历
void inordertraverse(bitree t)
{
if(t==NULL)
return;
inordertraverse(t->lchild);
printf("%c",t->data);
inordertraverse(t->rchild);
}
//二叉树的后序遍历
void postordertraverse(bitree t)
{
if(t==NULL)
return;
postordertraverse(t->lchild);
postordertraverse(t->rchild);
printf("%c",t->data);
}
void createbitree(bitree *t)
{
char ch;//输入结点的值(字符型)
scanf("%c",&ch);
if(ch=='#')
*t=NULL;
else
{
*t=(bitree)malloc(sizeof(bitnode));
if(!*t)
exit(-1);
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);
}
}
//二叉树的深度
int depth(bitree t)
{
int depthleft,depthright,depthval;
if(t)
{
depthleft=depth(t->lchild);
depthright=depth(t->rchild);
depthval=1+
(depthleft>depthright?depthleft:depthright);
}
else
depthval=0;
return depthval;
}
int main()
{
bitree t;
createbitree(&t);
preordertraverse(t);
inordertraverse(t);
postordertraverse(t);
depth(t);
return 0;
}
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录