查找技术综合应用.docVIP

  • 3
  • 0
  • 约2.47千字
  • 约 10页
  • 2021-02-23 发布于广东
  • 举报
查找技术综合应用 1、源程序代码 #include stdio.h #include stdlib.h #define max 25 typedef struct bst 〃定义二叉树 { int key; //int date; struct bst *lchild,*Tchild;〃左右孩子 ////////////////////////////////二叉树的插入函数 int Insertbst(bst * p,int k)〃在二叉树中插入一个数 { if(p=NULL)〃如果二叉树为空直接插入 p=(bst*)malloc(sizeof(bst)); p-key =k; p-lchild =p-rchild =NULL;//左右孩子的初值为 NULL return 1; } else if(k==p-key ) 〃如果插入的是已经存在,就不在插入 return 0; else if(kp-key )〃如果小于关键字,递归调用左子树 { return Insertbst(p-lchild ,k); } else 〃如果大于关键字,递归调用右子树 return Insertbst(p-rchild ,k); } bst* Creatbst(int a[J,int n) 〃二叉排序树的创建 { bst *bt=NULL; 〃初始化树为空 int i=0; while(in) { Insertbst(bt,a[i]); //将关键字插入到树中 return bt; 〃返回建立的二叉树的更指针 IIIIIIIIIIIIIIIIIIIIIIIIIII void InorderCbst^b)//屮序遍历二叉树的递归算法 { if(b!=NULL) { Inorder(b-lchild); printf(n%d\tH,b-key); Inorder(b-rchild); } } /////////////////////查找函数 int Searchbst(bst *bt,int k)〃二叉树的查找 { if(bt==NULL) //如果为空返回0 return 0; if(bt-key==k) return k;〃如果有则返冋k值 if(kbt-key) return Searchbst(bt-lchild,k);//递归调用左子树 else return Searchbst(bt-rchild,k);//递归调用右子树 } /////////////////删除函数 void Delatel(bst *p,bst*r) 〃当结点有左右子树的删除过程 { bst*q; if(r-rchild !=NULL) Delatel(p,r-rchild );〃递归找到最右下结点 else { p-key =r-key ;//将r的关键字赋值给P q=r; r=r-lchild ;〃直接将其左子树的根结点放在被删除的位置上 free(q); 〃释放原r的空间 } void Delate(bst *p)〃从二叉树中删除*P结点 bst *q; if(p-rchild =NULL) //结点没有右子树的情况 { q=p; p=p-lchild ;//直接将其右子树的跟结点放在删除的结点位置 free(q); } else if(p-lchild =NULL)〃结点没有左子树的情况 { q=p; p=p-rchild ;//直接将其左子树的跟结点放在删除的结点位置 free(q); } else Delatel(p,p-lchild );//结点既没有左子树也没有右子树 int Delatebst(bst *bt,int k) 〃删除函数 if(bt==NULL) return 0;//空二叉树删除失败 else { if(kbt-key) return Delatebst(bt-lchild ,k); else if(kbt-key) return Delatebst(bt-rchild ,k); else { Delate(bt); return 1; } } } lllllllllllllllllllllllllllllllllllllllll void main() bst *p; int a[max],i,n,m; printfC输入要排序的个数n : n); scanf(M%dH,n); for(i=0;in;i++) scanf(n%dn,a[i]); p=Creatbst(a,n); system(HclsH); printfC输入排序后的序列:\rT); Inorder(p);printf(n\nH); printfC输入要插入的数:\nH); scanf(H%dH,m); Insertbst(p,m); Inorder(p)

文档评论(0)

1亿VIP精品文档

相关文档