- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉排序树与平衡二叉树
#include stdio.h
#includestdlib.h
#define maxsize 100
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)(b))
#define LQ(a,b) ((a)(b))
#define LH 1 //左高
#define EH 0 //等高
#define RH -1 //右高
typedef struct node //定义二叉树排序的结点
{
int data; //数据域
struct node *left,*right; //left指向左孩子,ringt指向右孩子们
}dnode;
typedef struct BSTNode //定义二叉平衡树的结点
{
int data;
int bf; //结点的平衡因子
struct BSTNode *left,*right;
}BSTNode,*BSTree;
int n=0,m=0,total=0;
int a[30];
int n1=0,m1=0,total1=0;
int n2=0,m2=0,total2=0;
void sort(dnode *t,int c) // 将c插入到二叉排序树t中
{
dnode *p;
if(c=t-data)
if(t-right==NULL)
{
p=(dnode *)malloc(sizeof(dnode));
p-data=c;
p-left=p-right=NULL;
t-right=p;
}
else
sort(t-right,c);
if(ct-data)
if(t-left==NULL)
{
p=(dnode *)malloc(sizeof(dnode));
p-data=c;
p-left=p-right=NULL;
t-left=p;
}
else
sort(t-left,c);
}
dnode *creat() //创建二叉排序树
{
dnode *ht;
int c;
char k;
ht=(dnode *)malloc(sizeof(dnode));
printf(输入数据,按回车键结束:);
scanf(%d%c,c,k);
ht-data=c;
n++;
ht-left=ht-right=NULL;
if(k!=\n)
while(1)
{
scanf(%d%c,c,k);
sort(ht,c);
n++;
if(k==\n) break;
}
return ht;
}
void inorder(dnode *t) //中序遍历二叉排序树
{
if(t!=NULL)
{
m++;
inorder(t-left);
printf(%d ,t-data);
total+=m;
inorder(t-right);
m--;
}
}
void asl(int x) //计算平均查找长度
{
float s;
if(x==1)
{
s=(float)total/n;
printf(n: %d,total: %d,asl: %3.2f\n,n,total,s);
}
else if(x==2)
{
s=(float)total1/n1;
printf(n: %d,total: %d,asl: %3.2f\n,n1,total1,s);
}
else
{
s=(float)total2/n2;
printf(n: %d,total: %d,asl: %3.2f\n,n2,total2,s);
}
}
void find(dnode *t,int x,dnode *a[]) //将数据域为x的结点的地址给a[0],其父结点的地址给a[1]
{
dnode *p,*q;
p=t;
if(p-data==x)
{
a[0]=p;
a[1]=NULL;
return;
}
for(;;)
{
if(xp-data)
{
q=p;
if(p-right==NULL)
{
a[0]=a[1]=NULL;
return;
}
p=p-right;
if(p-data==x)
{
a[0]=p;
a[1]=q;
return;
}
}
if(xp-data)
{
文档评论(0)