| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:平衡二叉排序树遇到的问题???
只看楼主 加入收藏
茶米茶
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-1
收藏
 问题点数:0 回复次数:1 
平衡二叉排序树遇到的问题???

#include <stdio.h>
#include <conio.h>

#define NULL 0
struct node
{
int key;
int pf;
struct node *lch,*rch;
}*root=NULL;
typedef struct node treenode;
treenode *q,*p,*r,*s,*t;
/*q为新结点,p是多用途,s为距离s 最近的pf!=0的祖先,r为s的孩子,t是s的父亲 */

void ll()
{
s->lch=r->rch;
r->rch=s;
r->pf=s->pf=0;
}

void rr()
{
s->rch=r->lch;
r->rch=s;
r->pf=s->pf=0;
}

void lr()
{
p=r->rch;
r->rch=p->lch;
s->lch=p->rch;
p->lch=r;
p->rch=s;
switch(p->pf)
{case 0:r->pf=0,s->pf=0;break;
case 1:r->pf=0;s->pf=-1;break;
case -1:r->pf=1;s->pf=0;break;
}
}
void rl()
{
p=r->rch;
s->lch=p->lch;
r->rch=p->rch;
p->lch=s;
p->rch=r;
switch(p->pf)
{case 0:r->pf=0,s->pf=0;break;
case 1:r->pf=-1;s->pf=0;break;
case -1:r->pf=1;s->pf=0;break;
}
}

void insert(int k)
{
if (root==NULL)
{
root=malloc(sizeof(struct node));
root->key=k;
root->lch=NULL;
root->rch=NULL;
root->pf=0;
return;
}
p=NULL;q=root;
t=NULL;s=root;
while(q&&q->key!=k)
{
if (q->pf!=0)
{
t=p;
s=q;
}
p=q;
if(k>q->key) q=q->rch;
else q=q->lch;
}
if (q) return ;
q=malloc(sizeof(treenode));
q->pf=0;
q->lch=q->rch=0;
q->key=k;
if(k>p->key) p->rch=q;
else p->lch=q;

if(k>s->key) r=s->rch;
else r=s->lch;
p=r;
while (p!=q)
if (k>p->key)
{p->pf=1;p=p->rch;}
else {p->pf=-1;p=p->rch;}

switch(s->pf)
{
case 0: if(k>s->key) s->pf=1;
else s->pf=-1;break;
case 1: if(k<s->key) s->pf=0;
else {p=r;
if (k>p->key) rr();
else rl();
}break;
case -1: if(k>s->key) s->pf=0;
else {
p=r;
if(k<p->key) ll();
else lr();
}break;
}
if(t==NULL) root=p;
else if(k>t->key) t->rch=p;
else t->lch=p;


}

void creat_tree(int data[],int len)
{
int i;
for(i=0;i<len;i++)
insert(data[i]);

}
void printtree(treenode *rt)
{
if(rt!=NULL)
{
printf("%d",rt->key);
printtree(rt->lch);
printtree(rt->rch);
}
}

void main()
{

int datalist[20];
int i,j,number;

printf("请输入你的项数:");
scanf("%d",&number);
for(i=0;i<number;i++)
{printf("\n请输入第%d个数据:",i);
scanf("%d",&datalist[i]);
}

creat_tree(datalist,i);
printtree(root);
getch();
}

为运行之后不能显示输出树呢,每次都只是输出最后一个KEY而已啊

高手上呀


2006-06-20 20:57
上杉冰枫
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2006-6-24
收藏
得分:0 

因为→№頦§縎£銘→訫‰ 所以→№從此々吥£唁→愛‰
2006-06-24 18:32
快速回复:平衡二叉排序树遇到的问题???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062305 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved