当前位置:   article > 正文

二叉排序树的基本操作_依次输入一个关键字序列{48,15,63,56,88,9,60,52}, 要求:(1)按输入次序构造

依次输入一个关键字序列{48,15,63,56,88,9,60,52}, 要求:(1)按输入次序构造并画出

问题描述

       编写算法实现对依次输入的关键字序列建立二叉排序树,并能 实现二叉排序树的查找、插入和删除运算。

代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstdlib>
  4. using namespace std;
  5. #define KeyType int
  6. typedef struct
  7. {
  8. KeyType key;
  9. char name[20];
  10. }ElemTyped;
  11. typedef struct BSTNode
  12. {
  13. ElemTyped data;
  14. struct BSTNode *lchild,*rchild;
  15. }BSTNode,*BSTree;
  16. void SearchBST(BSTree T,KeyType key){
  17. if((T==NULL)||key==T->data.key){
  18. printf("关键字:%d\n名称:%s\n\n",T->data.key,T->data.name);
  19. return ;
  20. }
  21. else if(key<T->data.key&&(T->lchild!=NULL))
  22. return SearchBST(T->lchild,key);
  23. else if(key>T->data.key&&(T->rchild!=NULL))
  24. return SearchBST(T->rchild,key);
  25. else{
  26. printf("没有该关键字!\n\n");
  27. return ;
  28. }
  29. }
  30. void InsertBST(BSTree &T,ElemTyped e){
  31. BSTree s;
  32. if(T==NULL){
  33. s=new BSTNode;
  34. s->data=e;
  35. s->lchild=s->rchild=NULL;
  36. T=s;
  37. }
  38. else if(e.key<T->data.key)
  39. InsertBST(T->lchild,e);
  40. else
  41. InsertBST(T->rchild,e);
  42. }
  43. void CreatBST(BSTree &T){
  44. T=NULL;
  45. ElemTyped e;
  46. printf("请输入关键字个数:\n");
  47. int n;
  48. scanf("%d",&n);
  49. printf("请输入关键字:\n");
  50. for(int i=1;i<=n;i++){
  51. cin>>e.key>>e.name;
  52. InsertBST(T,e);
  53. }
  54. printf("创建成功!\n\n");
  55. system("Pause");
  56. system("cls");
  57. }
  58. void DeleteBST(BSTree &T,KeyType key){
  59. BSTree p,f,q,s;
  60. p=T;f=NULL;
  61. while(p){
  62. if(p->data.key==key)
  63. break;
  64. f=p;
  65. if(p->data.key>key)
  66. p=p->lchild;
  67. else
  68. p=p->rchild;
  69. }
  70. if(!p)
  71. return ;
  72. q=p;
  73. if((p->lchild)&&(p->rchild)){
  74. s=p->lchild;
  75. while(s->rchild){
  76. q=s;
  77. s=s->rchild;
  78. }
  79. p->data=s->data;
  80. if(q!=p)
  81. q->rchild=s->lchild;
  82. else
  83. q->lchild=s->lchild;
  84. delete s;
  85. return;
  86. }
  87. else if(!p->rchild){
  88. p=p->lchild;
  89. }
  90. else if(!p->rchild)
  91. p=p->rchild;
  92. if(!f)
  93. T=p;
  94. else if(q==f->lchild)
  95. f->lchild=p;
  96. else
  97. f->rchild=p;
  98. delete q;
  99. printf("删除成功!\n");
  100. system("Pause");
  101. system("cls");
  102. }
  103. int main()
  104. {
  105. BSTree T;
  106. while(1){
  107. printf("--------二叉排序树---------\n\n");
  108. printf(" 1.创建.\n");
  109. printf(" 2.查找.\n");
  110. printf(" 3.插入.\n");
  111. printf(" 4.删除.\n");
  112. printf(" 5.退出.\n\n");
  113. printf("---------------------------\n\n");
  114. printf("请输入您的选择:\n");
  115. int a;
  116. scanf("%d",&a);
  117. if(a==5){
  118. printf("谢谢使用!\n");
  119. break;
  120. }
  121. if(a!=1&&a!=2&&a!=3&&a!=4&&a!=5){
  122. printf("您输得不符合要求,请重新出入!\n");
  123. continue;
  124. }
  125. switch(a){
  126. case 1:CreatBST(T);break;
  127. case 2:
  128. printf("请输入要查找的关键字:\n");
  129. KeyType e;
  130. cin>>e;
  131. SearchBST(T,e);
  132. system("Pause");
  133. system("cls");
  134. break;
  135. case 3:
  136. ElemTyped e1;
  137. printf("请输入要插入的关键字和名称:\n");
  138. cin>>e1.key>>e1.name;
  139. InsertBST(T,e1);
  140. printf("插入成功!\n");
  141. system("Pause");
  142. system("cls");
  143. break;
  144. case 4:
  145. KeyType e2;
  146. printf("请输入要删除的关键字:\n");
  147. cin>>e2;
  148. DeleteBST(T,e2);
  149. break;
  150. }
  151. }
  152. return 0;
  153. }
  154. /*
  155. 45 CAO
  156. 12 ZHAO
  157. 53 DING
  158. 61 CHEN
  159. 37 WANG
  160. 24 LI
  161. 90 XIA
  162. 79 DU
  163. 3 MA
  164. 100 XYU
  165. */

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/709619
推荐阅读
相关标签
  

闽ICP备14008679号