首页 二叉排序数

二叉排序数

举报
开通vip

二叉排序数#include #include #include typedef struct node { int key; struct node *left; struct node *right; }BSTNode,*Bstree; Bstree serch(Bstree T,int e) //查询某个节并返回指向某个节点的指针{ if(T&&e==T->key) return T; else if(ekey)return serch(T->left,e); else return serch...

二叉排序数
#include #include #include typedef struct node { int key; struct node *left; struct node *right; }BSTNode,*Bstree; Bstree serch(Bstree T,int e) //查询某个节并返回指向某个节点的指针{ if(T&&e==T->key) return T; else if(ekey)return serch(T->left,e); else return serch(T->right,e); } int SearchBST(Bstree T,int e,Bstree f,Bstree &p) { if(!T) {p=f;return 0;} else if(ekey) return SearchBST(T->left,e,T,p); else return SearchBST(T->right,e,T,p); } Bstree InterBST(int a[],int n) //插入节点的同时建立二叉排序数 { Bstree p=NULL,s=NULL,T=NULL,k; for(int i=0;ikey=a[i]; s->left=s->right=NULL; if(T==NULL) { T=s; } if(!p)k=s; else if(a[i]key) p->left=s; else p->right=s; } } return T; void MidTree(Bstree tree) //中序遍历二叉树 { if (tree != NULL) { MidTree(tree->left); printf("%d ",tree->key); MidTree(tree->right); } } int DeletBST(Bstree M,int key) //删除某个节点 { Bstree T=M; Bstree s,q; Bstree parent; if(!T)return 0; else { while(key!=T->key) //查找要删除的节点 { if(keykey) { parent=T;T=T->left; } else { parent=T; T=T->right; } } if(!T->left&&!T->right) //当为叶子节点时 { if(key==parent->left->key) //当叶子节点为双亲的左孩子 { free(T); parent->left=NULL; } else if(key==parent->right->key) //当叶子节点为双亲的右孩子 { free(T); parent->right=NULL; } } else if(!T->right) //当删除的节点没有右孩子时 { q=T;parent->right=T->left;free(q); } else if(!T->left) //当删除的节点没有左孩子时 { q=T; if(!parent->left) { parent->left=T->right;free(q); } else { parent->right=T->right;free(q); } } else //当删除的节点左右孩子都没有时 { q=T;s=T->left; while(s->right){q=s;s=s->right;} T->key=s->key; if(q!=T)q->right=s->left; else q->left=s->left; free(s); } } return 1; } void main() { Bstree M=NULL,P; int a[10]={45,12,53,3,37,100,24,61,90,78}; M=InterBST(a,10); //插入节点并且建立二叉排序数 printf("查找关键字为3"); P=serch(M,3); printf("\n\n%d ",P->key); printf("\n"); printf ("中序遍历\n"); //中序遍历二叉树 MidTree(M); printf("\n"); printf("\n删除关键字78\n"); DeletBST(M,78); //删除节点 printf("\n"); printf ("中序遍历\n"); MidTree(M); printf("\n"); } //45,12,53,3,37,100,24,61,90,78 //4,9,0,1,8,6,3,5,2,7
本文档为【二叉排序数】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_995397
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:0
分类:互联网
上传时间:2019-09-11
浏览量:7