加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:11:41 所属栏目:百科 来源:网络整理
导读:废话不多说了,直接给大家贴代码了,具体代码如下所示: 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 = _va

废话不多说了,直接给大家贴代码了,具体代码如下所示:

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,Node * x)
{
  if (x == nullptr) {
    Node *tmp = new Node(key,value,1);
    return tmp;
  }
  if (x->key > key) {
    x->left=_put(key,x->left);
  }
  else if (x->key < key) {
    x->right=_put(key,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,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);
}

以上所述是小编给大家介绍的C++ 二叉搜索树(BST)的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读