数据结构二叉树的实现与三种遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 实现二叉树的先序、中序和后序遍历
#define MAX 30 //二叉树中最多结点数
#define NULL 0
#include
#include
typedef struct btnode //二叉树的结点类型
{
char data;
struct btnode *lchild,*rchild;
}bttree;
bttree *cre_tree(char *str,int i,int m) //将字符串中的第i个字符到第个m字符作为数据生成对应的满二叉树
{
bttree *p;
if(i>m) //无效结点
return NULL;
p=(bttree *)malloc(sizeof(bttree)); //生成新结点
p->data=str[i];
p->lchild=cre_tree(str,2*i+1,m); //创建左子树
p->rchild=cre_tree(str,2*i+2,m); //创建右子树
return p;
}
void lev_order(char s[],int n) //层次遍历,即输出字符数组的元素{
int i;
for(i=0;i { printf("%c",s[i]); printf("->"); } } void preorder(bttree *t) //先序遍历二叉树 { if(t!=NULL) { printf("%c",t->data); if(t->lchild) { printf("->"); preorder(t->lchild); } if(t->rchild) { printf("->"); preorder(t->rchild); } } } void inorder(bttree *t) //中序遍历二叉树{ if(t!=NULL) { inorder(t->lchild); printf("%c",t->data); printf("->"); inorder(t->rchild); } } void postorder(bttree *t) //后序遍历二叉树{ if(t!=NULL) { postorder(t->lchild); postorder(t->rchild); printf("%c",t->data); printf("->"); } } main() //主函数 { int i,n; char str[MAX]; bttree *root; //指向根结点的指针 printf("please input a bttree node number:\n"); scanf("%d",&n); getchar(); //输入数字 printf("please input a string which length is %d:",n); for(i=0;i str[i]=getchar(); printf("\n\n"); root=cre_tree(str,0,n); //生成二叉树 printf("the tree is already created\n"); //printf("lev_order before swapping:"); //lev_order(root,n); //printf("\n"); printf("lev_order before swapping:"); lev_order(str,n); printf("\n"); printf("the result after preorder processing:"); //先序遍历结果preorder(root); printf("\n"); printf("the result after inorder processing:"); //中序遍历结果 inorder(root); printf("\n"); printf("the result after postorder processing:"); //后序遍历结果postorder(root); printf("\n\n"); }