非完全二叉树的遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三二叉树的遍历
一、源程序
#define max 30
#define NULL 0
#include
#include
typedef struct BNode
{
char data;
struct BNode *lchild,*rchild;
}BinaryTree;
BinaryTree *cre_tree()
{
char ch;
BinaryTree *t;
scanf("%c",&ch);
if(ch=='#')
t=NULL;
else
{
t=(BinaryTree *)malloc(sizeof(BinaryTree));
t->data=ch;
t->lchild=cre_tree();
t->rchild=cre_tree();
}
return t;
}
void preorder(BinaryTree *t)
{
if(t!=NULL)
{
printf(" %c ",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
void inorder(BinaryTree *t)
{
if(t!=NULL)
{
inorder(t->lchild);
printf(" %c ",t->data);
inorder(t->rchild);
}
}
void postorder(BinaryTree *t)
{
if(t!=NULL)
{
postorder(t->lchild);
postorder(t->rchild);
printf(" %c ",t->data);
}
}
int leafs(BinaryTree *b)//求叶子数
{
int num1,num2;
if(b==NULL) return (0);
else if(b->lchild==NULL && b->rchild==NULL)
return (1);
else
{
num1=leafs(b->lchild);
num2=leafs(b->rchild);
return(num1+num2);
}
}
void main()
{
BinaryTree *root;
printf("请按先序遍历次序输入序列:(空结点输入#)\n");
root=cre_tree();
printf("\n先根遍历结果:");
preorder(root);
printf("\n");
printf("\n中根遍历结果:");
inorder(root);
printf("\n");
printf("\n后根遍历结果:");
postorder(root);
printf("\n");
printf("\n叶子数为:%d\n",leafs(root));
}
二、实验结果
三、实验总结
非完全二叉树的遍历跟完全二叉树的遍历差不多,先序中序后序遍历方法都一样,主要就是二叉树的创建有点区别。