C语言对序列构造平衡二叉树,输入带排序序列生成二叉排序树,并调整使其变为平衡二叉树...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

gurks

2014.07.08

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:48%    等级:9

已帮助:2262人

#include "stdio.h"#include "conio.h"#include "stdlib.h"#define NULL 0int leftdep,rightdep;typedef struct bitnode{char data;struct bitnode *lchild,*rchild;}bintnode,*bintree;bintree createbitree(){bintree t;char x;scanf("%c",&x);if(x==' ') t=NULL;else{t=(bintnode *)malloc(sizeof(bintnode)); t->data=x; t->lchild=createbitree(); t->rchild=createbitree();}return(t);}void preorder(bintree t)/*前序遍历*/{if(t){printf("%2c",t->data);preorder(t->lchild);preorder(t->rchild);}}void midorder(bintree t)/*中序遍历*/{if(t){midorder(t->lchild);  printf("%2c",t->data);  midorder(t->rchild);}}void printree(bintree t){if(t!=NULL){printf("%c",t->data); if(t->lchild!=NULL||t->rchild!=NULL) {printf("(");printree(t->lchild);  if(t->rchild!=NULL) printf(",");  printree(t->rchild); printf(")");}}}int treedepth(bintree t) {if(t==NULL) return 0;  else{leftdep=treedepth(t->lchild);  rightdep=treedepth(t->rchild);  if(leftdep>rightdep)return (leftdep+1);elsereturn(rightdep+1);}}int treeleaf(bintree t){if(t==NULL)return0;else if(t->lchild==NULL&&t->rchild==NULL) return1;else return(treeleaf(t->lchild)+treeleaf(t->rchild));}void lastorder(bintree t)/*后序遍历*/{if(t){lastorder(t->lchild);lastorder(t->rchild);printf("%2c",t->data);}}void translevel(bintree t){struct bitnode{bintree vec[30]; int f,r;}q;q.f=0;q.r=0;if(t!=NULL) printf("%2c",t->data); q.vec[q.r]=t;q.r=q.r+1; while (q.flchild!=NULL)  {printf("%2c",t->lchild->data);  q.vec[q.r]=t->lchild; q.r=q.r+1;}if(t->rchild!=NULL) {printf("%2c",t->rchild->data);  q.vec[q.r]=t->rchild;  q.r=q.r+1;}} printf("\n");}main(){bintree a;int j,k;clrscr();textcolor(2);printf("**************************欢迎您使用本二叉树操作系统**************************\n");printf("建造一棵二叉树请您输入各个结点的元素值,()表示一个空格键:\n");printf("输入示例:abc()()de()g()()f()()()回车:\n");a=createbitree();printf("您输入的二叉数嵌套法表示如下:\n");printree(a);printf("\n");printf("树的深度为:\n");j=treedepth(a);printf("%d\n",j);printf("二叉数的叶子接点个数为:\n");k=treeleaf(a);printf("%d\n",k);printf("您所输入的二叉树的前序遍历顺序输出如下:\n");if(!a) printf("二叉树为空\n");else{preorder(a);printf("\n");}printf("您所输入的二叉树的中序遍历顺序如下输出:\n");if(!a)  printf("二叉树为空\n");else{midorder(a);printf("\n");}printf("您所输入的二叉树的后序遍历顺序输出如下:\n");if(!a)  printf("二叉树为空\n");else{lastorder(a);printf("\n");}printf("您所输入的二叉树的层次顺序遍历输出如下:\n"); if(!a)  printf("二叉树为空\n");else{ translevel(a);}}

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值