C++ 实现二叉搜索树(BST)

来源:互联网 发布:法丽达官网 只有淘宝店 编辑:程序博客网 时间:2024/06/06 07:10
class BST{public:    struct Node    {        int key;//节点的key        int value;//节点的value        Node* left;        Node *right;        int N;//节点的叶子节点数目        Node(int _key, int _value, int _N)        {            key = _key;            value = _value;            N = _N;        }    };    BST();    ~BST();    void put(int key, int value);    int get(int key);    int deleteKey(int key);private:    Node* _deleteKey(int key, Node *x);    Node* _deleteMin(Node *x);    int size(Node *x);    int _get(int key, Node* x);    Node * _put(int key, int value,Node *x);    Node * min(Node *x);    Node* root;};inline int BST::size(Node * x){    if (x == nullptr)return 0;    return x->N;}int BST::_get(int key, Node * x){    if (x == nullptr)return 0;    if (x->key < key)_get(key, x->right);    else if (x->key > key)_get(key, x->left);    else {        return x->value;    }    return 0;}BST::Node* BST::_put(int key, int value, Node * x){    if (x == nullptr) {        Node *tmp = new Node(key, value, 1);        return tmp;    }    if (x->key > key) {        x->left=_put(key, value, x->left);    }    else if (x->key < key) {        x->right=_put(key, value, x->right);    }    else x->key = key;      x->N = size(x->left) + size(x->right) + 1;    return x;}BST::Node* BST::min(Node * x){    if (x->left == nullptr)return x;    return min(x->left);}BST::BST(){}BST::~BST(){}void BST::put(int key, int value){    root=_put(key, value, root);}int BST::get(int key){    return _get(key, root);}BST::Node* BST::_deleteKey(int key, Node * x){    if (x->key > key)x->left = _deleteKey(key, x->left);    else if (x->key < key)x->right = _deleteKey(key, x->right);    else {        if (x->left == nullptr)return x->right;        else if (x->right == nullptr)return x->left;        else {            Node *tmp = x;            x = min(tmp->right);            x->left = tmp->left;            x->right = _deleteMin(tmp->right);        }    }    x->N = size(x->left) + size(x->right) + 1;    return x;}BST::Node* BST::_deleteMin(Node * x){    if (x->left == nullptr)return x->right;    x->left = _deleteMin(x->left);    x->N = size(x->left) + size(x->right) + 1;    return x;}int BST::deleteKey(int key){    return _get(key, root);}
0 0
原创粉丝点击