• 标准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

  • 相关阅读:
    云主机装黑果实践(6):处理云主机上变色龙启动后置过程:驱动和黑屏
    云主机装黑果实践(5):重得到镜像和继续强化前置启动过程
    云主机装黑果实践(3):得到云主机安装镜像
    云主机装黑果实践(2):在deepin kvm下测试mbr方式安装的黑果10.15最新版
    百度贴吧私信群发软件
    eclipse 工程默认编码修改 JSP编码修改
    Jquery 对象转json ,Json转对象。兼容浏览器。
    让人操蛋的童工新闻
    Hibernate 只获取外键id,不获取内容
    Spring Data Jpa 规范接口表
  • 原文地址:https://www.cnblogs.com/wuyoucao/p/5027918.html
Copyright © 2020-2023  润新知