非完全二叉树的遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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));

}

二、实验结果

三、实验总结

非完全二叉树的遍历跟完全二叉树的遍历差不多,先序中序后序遍历方法都一样,主要就是二叉树的创建有点区别。

相关文档
最新文档