7_62.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:2k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include<iostream.h>
  2. #include<iomanip.h>
  3. int list=1;  //全局变量用于输出名次
  4. struct sport //结构声明(声明结构时不分配内存空间)
  5. {
  6. char num[4]; //数据成员1(结构中包含的数据变量称为数据成员)
  7. double grade; //数据成员2
  8. }; //不能缺少分号
  9. struct tree
  10. {
  11. sport* spt;  //指向sport结构的指针
  12. tree *left,*right;  //左、右子树指针
  13. };
  14. class Btree
  15. {
  16. tree* root;
  17. public:
  18. Btree(){root=NULL;}  //构造函数初始化根节点
  19. void creat_btree(sport*);
  20. void display()
  21. {
  22. cout<<"名次"<<"   "<<"编号"<<"   "<<"成绩"<<endl;
  23. inorder(root);
  24. cout<<endl;
  25. }
  26. void inorder(tree*);
  27. };
  28. void Btree::creat_btree(sport *x)  //建立排序二叉树
  29. {
  30. tree *newnode=new tree;
  31. newnode->spt=x;
  32. newnode->left=newnode->right=NULL;
  33. if (root==NULL)
  34. root=newnode;
  35. else
  36. {
  37. tree* back;
  38. tree* current=root;
  39. while(current!=NULL)  //找到要插入Newnode的节点指针
  40. {
  41. back=current;
  42. if(current->spt->grade>x->grade)
  43. current=current->left;
  44. else
  45. current=current->right;
  46. }
  47. if (back->spt->grade>x->grade)
  48. back->left=newnode;
  49. else
  50. back->right=newnode;
  51. }
  52. }
  53. void Btree::inorder(tree*tmp)  //中序遍历已建立的二叉排序树
  54. {
  55. if(tmp!=NULL)
  56. {
  57. inorder(tmp->left);
  58. cout<<setw(4)<<list<<setw(6)<<tmp->spt->num<<setw(8)<<tmp->spt->grade<<endl;
  59. list++;
  60. inorder(tmp->right);
  61. }
  62. }
  63. void main()
  64. {
  65. Btree A;
  66. sport a[12]={{"001",13.6},{"002",14.8},{"010",12.0},
  67. {"011",12.7},{"023",15.6},{"025",13.4},
  68. {"031",14.9},{"036",12.6},{"037",13.4},
  69. {"102",12.5},{"325",15.3},{"438",12.7}};
  70.     sport * pa[12]={&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],
  71. &a[6],&a[7],&a[8],&a[9],&a[10],&a[11]};
  72. cout<<"建立排序二叉树节点的顺序:"<<endl;
  73. for (int i=0;i<12;i++)
  74. {
  75. cout<<pa[i]->num<<"  "<<pa[i]->grade<<endl;
  76. A.creat_btree(pa[i]);
  77. }
  78. cout<<endl<<"中序遍历此二叉树输出排序后结果:"<<endl;
  79. cout<<endl;
  80. A.display();
  81. }