当前位置:   article > 正文

二叉排序树的查找_创建二叉排序树和二叉排序树的查找算法代码: (1)输入数据序列:45,24,53,12,37,93。

创建二叉排序树和二叉排序树的查找算法代码: (1)输入数据序列:45,24,53,12,37,93。根据输入的数据序列创建一棵二叉排序树(二叉链表); (2)输出二叉排序树的中序遍历序列:12,24,37,45,53,93;

课程名称:数据结构

实验项目名称:查找算法的实现与分析

实验目的:

1.掌握二叉排序树的创建及查找算法(递归和非递归均可)。

实验要求:

1、    创建一棵二叉排序树,并实现对该二叉排序树的查找算法。

实验过程:

1、    输入一数据序列,根据输入的数据序列创建一棵二叉排序树(二叉链表);

2、    在已创建的二叉排序树中查找“37”和“66”两个结点,并给出相应的查询结果。

实验报告中给出创建二叉排序树和二叉排序树的查找算法代码。

实验结果:

1、输入数据序列:45,24,53,12,37,93。

2、输出二叉排序树的中序遍历序列:12,24,37,45,53,93;

3、输入要查找的数据:37, 输出查找的结果:该结点已找到。

输入要查找的数据:93, 输出查找的结果:该结点未找到。

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef struct node
  6. {
  7. int element;
  8. node *leftchild, *rightchild;
  9. }*Bst,node;
  10. bool Bstinsert(Bst &T,int m) //二叉排序树插入函数
  11. {
  12. if(T==NULL) //空树时建立结点并插入
  13. {
  14. T=new node;
  15. T->element=m;
  16. T->leftchild=NULL;
  17. T->rightchild=NULL;
  18. return true;
  19. }
  20. if(m==T->element) //递归地插入二叉排序树
  21. return false;
  22. else if(m<T->element)
  23. {
  24. Bstinsert(T->leftchild,m);
  25. }
  26. else if(m>T->element)
  27. {
  28. Bstinsert(T->rightchild,m);
  29. }
  30. }
  31. void creat(Bst &T,int a[],int n)
  32. {
  33. T=NULL;
  34. int i;
  35. for(i=0; i<n; i++)
  36. {
  37. Bstinsert(T,a[i]);
  38. }
  39. return ;
  40. }
  41. void traverse(Bst &T)
  42. {
  43. if(T)
  44. {
  45. traverse(T->leftchild);
  46. cout<<T->element<<" ";
  47. traverse(T->rightchild);
  48. }
  49. }
  50. int find(Bst &T,int q,int &p) //寻找二叉排序树中是否存在指定结点的函数
  51. {
  52. if(T)
  53. {
  54. if(T->element==q)
  55. {
  56. p++;
  57. }
  58. find(T->leftchild,q,p);
  59. find(T->rightchild,q,p);
  60. }
  61. return p;
  62. }
  63. int main()
  64. {
  65. Bst T;
  66. int n;
  67. cout<<"请输入二叉排序树中结点的个数:";
  68. cin>>n;
  69. int a[n];
  70. cout<<"请输入结点值:" ;
  71. for(int i=0; i<n; i++)
  72. {
  73. cin>>a[i];
  74. }
  75. creat(T,a,n);
  76. cout<<"二叉排序树的中序遍历序列:";
  77. traverse(T);
  78. cout<<"\n"<<"输入要查找的数据:";
  79. int q;
  80. while(scanf("%d",&q)!=EOF)
  81. {
  82. int k=0;
  83. if(find(T,q,k)==1)
  84. cout<<"该结点已找到"<<"\n";
  85. else
  86. cout<<"该结点未找到"<<"\n";
  87. }
  88. return 0;
  89. }


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

闽ICP备14008679号