标准BST二叉搜索树写法


  本人最近被各种数据结构的实验折磨的不要不要的,特别是代码部分,对数据结构有严格的要求,比如写个BST要分成两个类,一个节点类,要给树类,关键是所以操作都要用函数完成,也就是在树类中不能直接操作节点,需要使用节点类中的函数来实现各种操作。

  简直太麻烦,但是花时间写了也是有好处的,认真写完绝对几年忘不了。同时用函数操作数据也更安全,将数据设为私有成员更符合规范。下面给出代码。

  

 1 #include<iostream>
2 using namespace std;
3
4 class BinNode {
5 private:
6 int element;
7 BinNode *leftChild;
8 BinNode *rightChild;
9 public:
10 BinNode(int a, BinNode* left, BinNode* right) {
11 element = a;
12 leftChild = left;
13 rightChild = right;
14 }
15 int val() { return element; }
16 BinNode* left() { return leftChild; }
17 void setLeft(BinNode *t) { leftChild=t; }
18 BinNode* right() { return rightChild; }
19 void setRight(BinNode *t) { rightChild = t; }
20 };
21 class BST{
22 private:
23 BinNode *root;
24 BinNode* insertHelp(int x, BinNode* root) {
25 BinNode* t = root;
26 if (t == NULL) { t = new BinNode(x, NULL, NULL); return t; }
27 else if (x < t->val())
28 t->setLeft(insertHelp(x, t->left()));
29 else if (x > t->val())
30 t->setRight(insertHelp(x, t->right()));
31 return t;
32 }
33 void findHelp(const int x, int &count, BinNode* root) {
34 count++;
35 if (root == NULL) { count = 0;return; }
36 else if (root->val() == x) return;
37 if(x<root->val())
38 findHelp(x, count, root->left());
39 if(x>=root->val())
40 findHelp(x, count, root->right());
41 }
42 public:
43 BST() { root = NULL;}
44 ~BST() { clear(root);}
45
46 void clear(BinNode *root) {
47 if (root != NULL) {
48 clear(root->left());
49 clear(root->right());
50 delete root;
51 }
52 }
53 void insert(int& x) {
54 root=insertHelp(x, root);
55 }
56 void find(const int x, int &count) {
57 findHelp(x, count, root);
58 }
59 };
60 int main() {
61 BST a;
62 int n;
63 cout << "请输入节点个数:" << endl;
64 cin >> n;
65 cout << "依次输入节点值:"<<endl;
66 for (int i = 0;i < n;i++) {
67 int x;cin >> x;
68 a.insert(x);
69 }
70 int num;
71 while ((cout << "请输入需要查找的值:(ctrl+z结束查找)" << endl)&&(cin>>num)&&num!=EOF){
72 int count=0;
73 a.find(num, count);
74 if (count == 0)
75 cout << "查找失败!" << endl;
76 else
77 cout << "查找成功!查找次数为:" << count << endl;
78 }
79 system("pause");
80 return 0;
81 }
View Code

下面是实验报告的文档地址

http://wenku.baidu.com/view/d97fb2b114791711cd791711

本站声明
本文转载自:http://www.cnblogs.com/wuyoucao/p/5027918.html     作者:烦嚣的人     发布日期:2015-12-08     本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。


 
© 2014-2016 ITdaan.com 粤ICP备14056181号