帮我改改啊!!!sos!!
#include <iostream>#include <iomanip>
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *lchild;
struct BiNode *rchild;
}*BiTree,BiNode;
//创建一个二叉排序树//
BiTree *createBiTree(BiTree *T)
{char *p;
char ch;
p=T;
while(p)
{scanf("%c",ch);
if(!(BiTree*)malloc(sizeof(BiTree)))
return 0;
p->data=ch;
createBiTree(p->lchild);
createBiTree(p->rchild);
}
return T;
}
//对二叉排序树做递增输出//
void Dizeng(BiNode *T)
{
int m,k;
if(T!=NULL)
{
m++;
Dizeng(T->lchild);
printf("%d",T->data);
k=k+m;
Dizeng(T->rchild);
}
}
//对二叉树做递减输出//
void Dijian(BiNode *T)
{
if(T!=NULL)
{
Dijian(T->rchild);
printf("%d",T->data);
Dijian(T->lchild);
}
}
//计算二叉排序树T的平均查找长度,输出结果//
void pjczcd()
{
float ASL;
ASL=(float)k/n;
printf("平均查找长度为:%f",ASL);
}
//在二叉排序树T上删除指定结点
void Delete(BiTree &T, KeyType key)
{
if(!T) return FALSE;
else{
if(EQ(key,T->data.key)) return Delete(T);
else if(LT(key,T->data.key)) return Delete(T->lchild,key);
else return Delete(T->rchild,key);
}
}
//二叉树的中序递归遍历查找//
void inorder(BiTNode *T){//中序遍历二叉树
if(T!=NULL){
inorder(T->lchild );
printf("%c ",T->data);
inorder(BT->rchild );
}
}
//求二叉树的深度//
int TreeDepth(BiNode *T)
{
int leftdep, rightdep;
if(T==NULL) return(0);
else
{
leftdep=TreeDepth(T->lchild);
rightdep=TreeDepth(T->rchild);
if( leftdep>rightdep)
return(leftdep+1);
else return(rightdep+1);
}
}
//求二叉树的平衡因子//
int AVL(BiNode *T)
{
int m1,n1,i;
m1=TreeDepth(T->lchild);
n1=TreeDepth(T->rchild);
printf("左子树的深度:%d\n",m1);
printf("右子树的深度:%d\n",n1);
i=m1-n1;
return i;
}
/************主函数***********/
void main()
{
printf("\t..............................................\n");
printf("\t 1.创建一棵二叉排序树 \n");
printf("\t 2.递增输出二叉排序树 \n");
printf("\t 3.递减输出二叉排序树 \n");
printf("\t 4.求二叉排序树的平均查找长度 \n");
printf("\t 5.求二叉排序树某结点的平衡因子 \n");
printf("\t 6.退出系统 \n");
printf("\t............................................\n\n");
int m1,n1,i,choice;
BiNode *h,*q;
q=(BTNode *)malloc(sizeof(BTNode));q=NULL;
for(;;)
{
printf("请做出你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
h=creatBiTree();getchar();break;
case 2:
printf("二叉排序树的递增输出:");
PreOrder(h);
printf("\n");
break;
case 3:
printf("二叉排序树的递减输出:");
destorder(h);
printf("\n");
break;
case 4:
printf("二叉排序树的平均查找长度:");
ASL();
printf("\n");
break;
case 5:
printf("输入要求的结点:");
scanf("%d",&m1);
q=PreOrder(h,m1);
printf("%d \n",q->data);
i=AVL(q);
printf("该结点的平衡因子为: %d\n",i);
break;
if(choice==7)
{
exit(0);
}
}
}
}