为了账号安全,请及时绑定邮箱和手机立即绑定

可以帮忙看看吗?删除函数有错误,要求加一个查找平均长度函数可以吗

可以帮忙看看吗?删除函数有错误,要求加一个查找平均长度函数可以吗

csh_001 2016-06-26 12:08:45
#include<stdio.h>#include"string.h"#include<stdlib.h> typedef struct node #define Max 100{    int data;struct node *lchild,*rchild;}BinTNode; //自定义二叉树的结点类型typedef BinTNode *BinTree; //定义二叉树的指针int NodeNum,leaf; //NodeNum为结点数,leaf为叶子数//==========基于先序遍历算法创建二叉树==============//=====要求输入先序序列,其中加入虚结点"#"以示空指针的位置==========BinTree CreatBinTree(void){BinTree T;int ch;if((ch=getchar())=='#')return(NULL); //读入#,返回空指针else{ T=(BinTNode *)malloc(sizeof(BinTNode)); //生成结点T->data=ch;T->lchild=CreatBinTree(); //构造左子树T->rchild=CreatBinTree(); //构造右子树return(T);}}//========NLR 先序遍历=============void Preorder(BinTree T){if(T) {printf("%c",T->data); //访问结点Preorder(T->lchild); //先序遍历左子树Preorder(T->rchild); //先序遍历右子树}}//========LNR 中序遍历=============== void Inorder(BinTree T) {if(T){Inorder(T->lchild);printf("%c",T->data);Inorder(T->rchild);}}//==========LRN 后序遍历============void Postorder(BinTree T){if(T){Postorder(T->lchild);Postorder(T->rchild);printf("%c",T->data);}} //=====采用后序遍历求二叉树的深度、结点数及叶子数的递归算法======== int hl,hr,max;TreeDepth(BinTree T) {if(T){hl=TreeDepth(T->lchild); //求左深度hr=TreeDepth(T->rchild); //求右深度max=hl>hr? hl:hr; //取左右深度的最大值 NodeNum=NodeNum+1; //求结点数if(hl==0&&hr==0) leaf=leaf+1; //若左右深度为0,即为叶子。return(max+1);}else return(0);} //====利用"先进先出"(FIFO)队列,按层次遍历二叉树==========void Levelorder(BinTree T){int front=0,rear=1;BinTNode *cq[Max],*p; //定义结点的指针数组cqcq[1]=T; //根入队while(front!=rear) {front=(front+1)%NodeNum;p=cq[front]; //出队printf("%c",p->data); //出队,输出结点的值if(p->lchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->lchild; //左子树入队}if(p->rchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->rchild; //右子树入队}}} //==========主函数================= void main(){BinTree root;int i,depth;printf("\n");printf("Creat Bin_Tree; Input preorder:"); //输入完全二叉树的先序序列,// 用#代表虚结点,如ABD###CE##F##root=CreatBinTree(); //创建二叉树,返回根结点do { //从菜单中选择遍历方式,输入序号。printf("\t********** select ************\n");printf("\t1: Preorder Traversal\n"); printf("\t2: Iorder Traversal\n");printf("\t3: Postorder traversal\n");printf("\t4: PostTreeDepth,Node number,Leaf number\n");printf("\t5: Level Depth\n"); //按层次遍历之前,先选择4,求出该树的结点数。printf("\t0: Exit\n");printf("\t*******************************\n");scanf("%d",&i); //输入菜单序号(0-5)switch (i){case 1: printf("Print Bin_tree Preorder: ");Preorder(root); //先序遍历break;case 2: printf("Print Bin_Tree Inorder: ");Inorder(root); //中序遍历break;case 3: printf("Print Bin_Tree Postorder: ");Postorder(root); //后序遍历break;case 4: depth=TreeDepth(root); //求树的深度及叶子数printf("BinTree Depth=%d BinTree Node number=%d",depth,NodeNum);printf(" BinTree Leaf number=%d",leaf);break;case 5: printf("LevePrint Bin_Tree: ");Levelorder(root); //按层次遍历break;default: exit(1);}printf("\n");} while(i!=0);}
查看完整描述

目前暂无任何回答

  • 0 回答
  • 1 关注
  • 1240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信