二叉排序树(C语言)

二叉排序树(C语言)

ID:39684536

大小:16.28 KB

页数:7页

时间:2019-07-09

二叉排序树(C语言)_第1页
二叉排序树(C语言)_第2页
二叉排序树(C语言)_第3页
二叉排序树(C语言)_第4页
二叉排序树(C语言)_第5页
资源描述:

《二叉排序树(C语言)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#includetypedefintKeyType;typedefstructBinSearchNode{KeyTypekey;/*结点的关键码字段*/structBinSearchNode*llink,*rlink;/*二叉树的左、右指针*/}DicElement;typedefstruct{intMAXNUM;/*字典中元素的个数上界*/intn;/*为字典中实际元素的个数*/int*element;/*存放字典中的元素*/}SeqDictionary;structBi

2、nSearchNode;typedefstructBinSearchNode*PBinSearchNode;typedefstructBinSearchNode*BinSearchTree;/*二叉排序树*/typedefBinSearchTree*PBinSearchTree;intsearch(PBinSearchTreeptree,KeyTypekey,PBinSearchNode*position){PBinSearchNodep,q;p=*ptree;q=p;while(p!=NULL){q=p;/*用q记录父结点的

3、位置*/if(p->key==key){*position=p;return1;}/*检索成功*/elseif(p->key>key)p=p->llink;/*进入左子树继续检索*/elsep=p->rlink;/*进入右子树继续检索*/}*position=q;return0;/*检索失败,position指向失败时的父结点*/}voidinOrder(BinSearchNode*p){if(p){if(p->llink)inOrder(p->llink);printf("%d",p->key);if(p->rlink)in

4、Order(p->rlink);}}intinsert(PBinSearchTreeptree,KeyTypekey){PBinSearchNodep,position;if(search(ptree,key,&position)==1)return1;/*已存在关键码为key的结点*/p=(PBinSearchNode)malloc(sizeof(structBinSearchNode));/*申请新结点*/if(p==NULL){printf("Error");return0;}/*申请空间出错*/p->key=key

5、;p->llink=p->rlink=NULL;/*对新结点的赋值*/if(position==NULL)*ptree=p;/*原树为空树*/elseif(keykey)position->llink=p;/*插入position的左子树*/elseposition->rlink=p;/*插入position的右子树*/return1;}intcreatSearchTree(PBinSearchTreeptree,SeqDictionary*dic)//新建二叉排序树{inti;*ptree=NULL;/

6、*将二叉排序树置空*/printf("请输入字典中允许的最大元素个数");scanf("%d",&dic->MAXNUM);dic->element=(int*)malloc(sizeof(int));printf("请输入当前要插入的元素的个数");scanf("%d",&dic->n);printf("请输入%d个大小不一样的整数",dic->n);for(i=0;in;i++){scanf("%d",&dic->element[i]);if(!insert(ptree,dic->element[i

7、]))return0;/*将新结点插入树中*/}return1;}intdeleteNode_a(PBinSearchTreeptree,KeyTypekey){PBinSearchNodeparentp,p,r;p=*ptree;parentp=NULL;while(p!=NULL){if(p->key==key)break;/*找到了关键码为key的结点*/parentp=p;/*没有找到选子树*/if(p->key>key)p=p->llink;elsep=p->rlink;}if(p==NULL)return0;/*不

8、存在*/if(p->llink==NULL){/*无左子树*/if(parentp==NULL)/*删除根结点*/*ptree=p->rlink;elseif(parentp->llink==p)/*将右子树链到父结点的左链*/parentp->llink=p->rlink;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。