• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 二叉搜索树(BST)的实现方法

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了二叉搜索树,二叉搜索树的建立,最优二叉搜索树,什么是二叉搜索树,二叉搜索树的删除等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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);
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 二叉搜索树(BST)的实现方法
  • 二叉搜索树源码分享
  • c语言实现二叉查找树实例方法
  • 二叉搜索树的插入与删除(详细解析)

相关文章

  • 2017-05-28C语言中十六进制转十进制两种实现方法
  • 2017-05-28C++ 基本算法 冒泡法、交换法、选择法、实现代码集合
  • 2017-05-28C++用new创建对象和不用new创建对象的区别解析
  • 2017-05-28C++中的extern声明变量详解
  • 2017-05-28java实现任意四则运算表达式求值算法
  • 2017-05-28C语言编程中实现二分查找的简单入门实例
  • 2017-05-28浅谈C++中对象的复制与对象之间的相互赋值
  • 2017-05-28C语言 数据结构堆排序顺序存储(升序)
  • 2017-05-28C++中4种强制类型转换的区别总结
  • 2017-05-28C++ 中静态成员函数与非静态成员函数的区别

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅析char 指针变量char *=p 这个语句的输出问题
    • C++ operator关键字(重载操作符)的用法详解
    • c语言实现24小时制转换为12小时制示例
    • static关键字的作用详解
    • 使用c语言生成随机数的示例分享
    • 解析在Direct2D中画Bezier曲线的实现方法
    • c++11可变参数使用示例
    • for循环中删除map中的元素valgrind检测提示error:Invalid read of size 8
    • C++11中lambda、std::function和std:bind详解
    • 三种获取网页源码的方法(使用MFC/Socket实现)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有