二叉查找树

#include<iostream>
#include<algorithm>
#include<stack>using namespace std;class BinarySearchTree{
private:struct BN{int data;BN *left;BN *right;BN(int data,BN *left,BN *right){this->data=data;this->left=left;this->right=right;}};BN *root;public:BinarySearchTree(){root=new BN(0,NULL,NULL);}void insert_s(int x,BN *&t){if(t==NULL){t=new BN(x,NULL,NULL);}if(x<t->data){insert_s(x,t->left);}else if(x>t->data){insert_s(x,t->right);}}  void insert(int x){//将新的元素插入二叉查找树 insert_s(x,root);}void printTree_s(const BN *t){ if(t!=NULL){printTree_s(t->left);printTree_s(t->right);cout<<t->data<<endl;}}void printTree(){//实现的是后序遍历 printTree_s(root);}void PreOrder(const BN *root){if(root!=NULL){cout<<root->data<<endl;PreOrder(root->left);PreOrder(root->right);}}void InOrder(const BN *root){if(root!=NULL){InOrder(root->left);cout<<root->data<<endl;InOrder(root->right);}}void PostOrder(const BN *root){PostOrder(root->left);PostOrder(root->right);cout<<root->data;}void remove(int x){//删除某个特定值 remove_s(x,root);}void remove_s(int x,BN *&t){if(t==NULL){return;}if(x<t->data){remove_s(x,t->left);}else if(x>t->data){remove_s(x,t->right);}else if(t->right!=NULL&&t->left!=NULL){t->data=findMin(t->right)->data;remove_s(t->data,t->right);}else{BN *old=t;t=(t->left!=NULL)?t->left:t->right;delete old;}}BN *findMin(BN *t){//找到数组中的最小值 if(t==NULL){return NULL;}if(t->left==NULL){return t;}return findMin(t->left);}bool contains(int x){//查找二叉树中是否有某个特定元素 return contain_s(x,root);}bool contain_s(int x,const BN *t){if(t==NULL){return false;}if(x<t->data){return contain_s(x,t->left);}else if(x>t->data){return contain_s(x,t->right);}else{return true;}}};

二叉查找树

数据结构:二叉查找树相关推荐

  1. 数据结构--二叉查找树 Binary Search Tree

    文章目录 1.二叉查找树概念 2.二叉查找树操作 2.1 查找 2.2 插入 2.3 删除 2.4 其他 3. 支持重复数据的二叉查找树 4 有散列表了,还需要二叉查找树? 5 代码实现 1.二叉查找 ...

  2. c#数据结构———二叉查找树

    using System;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  3. 学习数据结构 二叉查找树(binary search tree)

    2019独角兽企业重金招聘Python工程师标准>>> 为学习 LLVM 的 ImmutableSet,其底层的实现选择为 AVL 树(平衡二叉搜索树),我不很熟悉该树,虽然大致知道 ...

  4. Python数据结构————二叉查找树的实现

    对于二叉查找树的每个节点Node,它的左子树中所有的关键字都小于Node的关键字,而右子树中的所有关键字都大于Node的关键字. 二叉查找树的平均深度是O(log N). 1.初始化 class Bi ...

  5. 数据结构|-二叉查找树(二叉搜索树)的链式存储结构的实现

    二叉排序树,又称为二叉查找树. 它或者是一棵空树,或者是具有下列性质的二叉树. 若它的左子树不为空,则左子树上所有的结点的值均小于根结构的值: 若它的右子树不为空,则右字数上所有结点的值均大于它的根结 ...

  6. 数据结构——二叉查找树(BST)的删除

    数据结构--二叉树(BST)的删除 文章目录 数据结构--二叉树(BST)的删除 前言 一.BST删除的几种情况 二.节点删除方法 1.一般方法 2.对1方法的优化 3.懒汉删除(前继和后继) 前言 ...

  7. 数据库底层设计(MYSQL索引的数据结构)

    前言 说到数据库这个词,我只能用爱恨交加这个词来形容它.自己之前还单纯懵懂的时候进了数据库的课堂,听完数据库的课,觉得这是一门再简单不过的课程,任何一门编程语言都比SQL要晦涩难懂,任何一门理论课程都 ...

  8. MySQL底层为什么要选用B+树作为索引的数据结构呢?

    文章目录 MySQL底层为什么要选用B+树作为索引的数据结构呢? MySQL 索引底层数据结构选型 哈希表(Hash) 二叉查找树(BST) 平衡二叉树(AVL树) 红黑树 B-树 B+树 参考 My ...

  9. MySQL(三)MySQL索引原理

    数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询.更新数据库表中数据.                                                    ...

  10. [转载] --- 数据库基本知识

    里面的很多点,我之前都总结过,但是感觉这篇把这些都连起来了,总结的挺好,转载保存一下 [从入门到入土]令人脱发的数据库底层设计 前言 说到数据库这个词,我只能用爱恨交加这个词来形容它.两年前在自己还单 ...

最新文章

  1. 操作系统学习笔记:进程同步
  2. java 故障排查_java线上服务问题排查
  3. Python基础入门:endswith() 函数
  4. 怎么用金蝶记kis账王查询账簿
  5. LInux查看文件内容
  6. (笔试题)和0交换的排序
  7. 到底什么是 OAuth 2.0
  8. python学习路线----天池龙珠计划Python训练营task1~3
  9. 如何利用DTS数据同步功能,快速创建数据同步作业
  10. MySQL的btree索引和hash索引聚集索引
  11. 第十一届河南省程序设计大赛----部分题解
  12. Python实现8中常用排序算法
  13. JDK11下载和安装(macos)
  14. Linux 中文文件名乱码解决 FTP文件名乱码
  15. python图片转字符画代码_python实现图片转字符画的完整代码
  16. ABAP 供应商主数据比较常用的表
  17. 2021-2027全球与中国拆弹机器人市场现状及未来发展趋势
  18. 【考研经验】双非二战山东大学计算机技术初试第二经验贴
  19. H3C系列交换机系统版本升级及导入配置
  20. 在 iPad和 iPhone的浏览器上查看网页源代码

热门文章

  1. python中解释说明符号_python注释以什么符号开始
  2. 升级tomcat遇到的坑
  3. Struts2-03-拦截器(BOS物流项目用户登录拦截)
  4. 每天一点正则表达式复习(一)
  5. Flink on Zeppelin (3) - Streaming 篇
  6. 多维多重背包问题_动态规划--背包问题
  7. 多线程中的互斥控制程序代码_互斥锁解决 Python 中多线程共享全局变量的问题...
  8. 简单使用_八角气囊如何使用简单介绍
  9. cad相对坐标快捷键_CAD里面绝对、相对、极坐标是什么?如何区别
  10. 判断目录下的文件或者文件夹是否存在