iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >什么是二分搜索树
  • 476
分享到

什么是二分搜索树

2024-04-02 19:04:59 476人浏览 安东尼
摘要

这篇文章主要介绍“什么是二分搜索树”,在日常操作中,相信很多人在什么是二分搜索树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是二分搜索树”的疑惑有所帮助!接下来,请跟着

这篇文章主要介绍“什么是二分搜索树”,在日常操作中,相信很多人在什么是二分搜索树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是二分搜索树”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、树结构

树是一种很特别的数据结构,树这种数据结构叫做 “树” 就是因为它 长得像一棵树  。但是这棵树画成的图长得却是一棵倒着的树,根在上,叶在下。树是图的一种,树和图的区别就在于:树是没有环的,而图是可以有环的。

树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

什么是二分搜索树

二、为什么要有树结构

2.1 树结构是一种天然的组织结构

比如说电脑中的文件夹,我们需要找到一个特定的文件,需要到某个文件夹下去找这个文件,计算机的文件存储的结构来源于生活。再比如说图书馆,我们知道图书馆里面有  历史类、数理类、计算机类,我们想要找到关于java的书籍,就需要到计算机类的Java中去找到我们需要的图书

什么是二分搜索树

比如公司里面的层级结构:CEO、HR CTO等等,还有我们比较常见的家谱等等,都是类似于树结构

什么是二分搜索树

将数据使用树结构后,会更加的高效

三、二分搜索树

3.1 特点

  • 二分搜索树是一个动态数据结构

  • 二分搜索树也是一颗二叉树(也叫多叉树)

  • 二分搜索树的每个节点的值都大于其左子树的所有节点的值,同时每个节点的值都小于其右子树的所有节点的值

  • 存储的元素必须有可比较性, Java中的话就要求二分搜索树保存的数据类型要实现Comparable接口, 或者使用额外的比较器实现

  • 每一颗子树也是二分搜索树

  • 二分搜索树具有唯一根节点,同时在二叉树中最底下是它的叶子节点

什么是二分搜索树

  • 二分搜索树具有唯根节点,每个节点最多有两个孩子(左边的叫左孩子,右边的叫右孩子),同时每个节点最多有一个父亲

二分搜索树天然的具有递归特性

  • 每个节点的左子树也是二叉树

  • 每个节点的右子树也是二叉树

什么是二分搜索树

二叉树不一定是满的,一个接电脑也是二叉树、空也是二叉树

什么是二分搜索树

四、具体代码实现

在进行相关操作之前, 先定义一个支持泛型的节点类, 用于存储二分搜索树每个节点的信息, 这个类作为二分搜索树的一个内部类,  二分搜索树的类声明以及node节点类声明如下:

public class BST> {  private class Node{  public E e;  public Node left,right;  public Node(E e){  this.e = e;  left = null;  right = null;  }  }  //节点  private Node root;  // 树容量  private int size;  public BST(){  root = null;  size = 0;  }  public int size(){  return size;  }  public boolean isEmpty(){  return size == 0;  }  }

4.1 添加元素

二分搜索树添加元素的非递归写法,和链表很像,由于二分搜索树本身的递归特性, 所以可以很方便的使用递归实现向二分搜索树中添加元素,

什么是二分搜索树

代码实现:

//向二分搜索树添加新的元素e  public void add(E e){  root = add(root,e);  }  //向以Node为根的二分搜索树中插入元素 E,递归算法  //返回插入新节点后二分搜索树的根  private Node add(Node node,E e){  if(node == null){  size++;  return new Node(e);  }  if(e.compareTo(node.e) < 0)  node.left = add(node.left,e);  else if(e.compareTo(node.e) > 0)  node.right = add(node.right,e);  return node;  }

4.2 查找元素

由于二分搜索树没有下标, 所以针对二分搜索树的查找操作, 我们需要定义一个 contains() 方法, 查看二分搜索树是否包含某个元素,  返回一个布尔型变量

代码实现:

//看二分是搜索树中是否包含元素e  public boolean contains(E e){  return contains(root,e);  }  //看以Node为根的二分搜索树中是否包含元素e,递归算法  private boolean contains(Node node,E e){  if(node == null)  return false;  if(e.compareTo(node.e) == 0)  return true;  else if(e.compareTo(node.e) < 0)  return contains(node.left,e);  else //e.compareTo(node.e) > 0  return contains(node.right,e);  }

4.3 遍历操作

一、 什么是遍历操作

  • 遍历操作就是把所有的节点都访问一遍

  • 访问的原因和业务相关

  • 遍历分类

前序遍历 : 对当前节点的遍历在对左右孩子节点的遍历之前, 遍历顺序 : 当前节点->左孩子->右孩子中序遍历 :  对当前节点的遍历在对左右孩子节点的遍历中间, 遍历顺序 : 左孩子->当前节点->右孩子后序遍历 : 对当前节点的遍历在对左右孩子节点的遍历之后,  遍历顺序 : 左孩子->右孩子->当前节点

二、 前序遍历

//二分搜索树前序遍历  public void preOrder(){  preOrder(root);  }  //前序遍历以Node为根的二分搜索树,递归算法  private void preOrder(Node node){  if(node == null)  return;  System.out.println(node.e);  preOrder(node.left);  preOrder(node.right);  }  public void preOrderNR(){  Stack stack = new Stack<>();  stack.push(root);  while(!stack.isEmpty()){  Node cur = stack.pop();  System.out.println(cur.e);  if(cur.right != null)  stack.push(cur.right);  if(cur.left != null)  stack.push(cur.left);  }  }

三、 中序遍历

什么是二分搜索树

//二分搜索树的中序遍历  public void inOrder(){  inOrder(root);  }  //中序遍历以Node为根的二分搜索树,递归算法  private void inOrder(Node node){  if(node ==null)  return;  inOrder(node.left);  System.out.println(node.e);  inOrder(node.right);  }

四、 后序遍历

什么是二分搜索树
//二分搜索树的后序遍历  public void postOrder(){  inOrder(root);  }  public void levelOrder(){  Queue q = new LinkedList();  q.add(root);  while (!q.isEmpty()){  Node cur = q.remove();  System.out.println(cur.e);  if(cur.left != null)  q.add(cur.left);  if(cur.right != null)  q.add(cur.right);  }  }  //后序遍历以Node为根的二分搜索树,递归算法  private void postOrder(Node node){  if(node ==null)  return;  inOrder(node.left);  inOrder(node.right);  System.out.println(node.e);  }

五、 理解前中后

什么是二分搜索树

二分搜索树前序非递归写法

什么是二分搜索树

什么是二分搜索树

到此,关于“什么是二分搜索树”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 什么是二分搜索树

本文链接: https://www.lsjlt.com/news/66323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是二分搜索树
    这篇文章主要介绍“什么是二分搜索树”,在日常操作中,相信很多人在什么是二分搜索树问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是二分搜索树”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • 二叉搜索树
    💕人生没有太晚的开始,所有的时刻都是七点。 —— 温妮 · 普赖弗曼💕 🐼作者:不能再留遗憾了 🎆专栏:Java学习 Ὡ...
    99+
    2023-09-01
    java 算法 数据结构
  • 二叉搜索树(C++)
    二叉搜索树 概念二叉搜索树的应用二叉搜索树的实现K模型基本结构和函数声明接口实现①find——查找关键码②Insert——插入关键码③Erase——删除关键码(==重点==)时间复杂度 源码(整体)非递归递归 ...
    99+
    2023-08-30
    c++
  • Java如何实现二分搜索树
    这篇文章将为大家详细讲解有关Java如何实现二分搜索树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.概念a.是个二叉树(每个节点最多有两个子节点)b.对于这棵树中的节点的节点值左子树中的所有节点值 &...
    99+
    2023-06-29
  • C++二叉搜索树实例分析
    本篇内容介绍了“C++二叉搜索树实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!独一无二的二叉搜索树Given an integer&...
    99+
    2023-06-19
  • 何为二叉搜索树
    本篇内容主要讲解“何为二叉搜索树”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“何为二叉搜索树”吧!什么是树树是一种数据结构,它是由n(n>=1)个有限结点...
    99+
    2024-04-02
  • 什么是多路搜索树B树和B+树
    本篇文章给大家分享的是有关什么是多路搜索树B树和B+树,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。多路搜索树完全二叉树高度:O(log2N)...
    99+
    2024-04-02
  • 完全二叉树和线索二叉树是什么
    完全二叉树和线索二叉树是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。完全二叉树什么叫完全二叉树呢?在说到完全二叉树之前,我们先说另外一个名词:“满二叉树”。像我们之前...
    99+
    2023-06-20
  • java二叉搜索树使用实例分析
    本篇内容主要讲解“java二叉搜索树使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java二叉搜索树使用实例分析”吧!概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性...
    99+
    2023-06-29
  • Java实现二分搜索树的示例代码
    目录1.概念2.重点操作3.完整代码1.概念 a.是个二叉树(每个节点最多有两个子节点) b.对于这棵树中的节点的节点值 左子树中的所有节点值 < 根节点 < 右子树的所...
    99+
    2024-04-02
  • C++怎么把二叉搜索树转换累加树
    今天小编给大家分享一下C++怎么把二叉搜索树转换累加树的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。把二叉搜索树转换为累加树...
    99+
    2023-07-04
  • 利用java实现二叉搜索树
    目录二叉搜索树的定义实现一颗二叉搜索树二叉搜索树的定义类二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除二叉搜索树的定义 它是一颗二叉树 任一节点的左子树上的所有节...
    99+
    2024-04-02
  • JavaScript二叉搜索树构建操作实例分析
    本篇内容介绍了“JavaScript二叉搜索树构建操作实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是二叉搜索树二叉搜索树首先它...
    99+
    2023-07-02
  • 怎么利用JavaScript实现二叉搜索树
    这篇文章给大家分享的是有关怎么利用JavaScript实现二叉搜索树的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。计算机科学中最常用和讨论最多的数据结构之一是二叉搜索树。这通常是引入的第一个具有非线性插入算法的数...
    99+
    2023-06-14
  • C++简单实现与分析二叉搜索树流程
    目录二叉搜索树二叉搜索树的重要操作二叉搜索树实现(key模型)二叉搜索树的应用二叉搜索树的实现(key/value模型)二叉搜索树 二叉搜索树又被称为二叉排序树。它可以是一个空树,如...
    99+
    2024-04-02
  • Java数据结构之二叉搜索树实例分析
    这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑...
    99+
    2023-06-30
  • Java二叉搜索树增、插、删、创的示例分析
    小编给大家分享一下Java二叉搜索树增、插、删、创的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有...
    99+
    2023-06-29
  • Java数据结构超详细分析二叉搜索树
    目录1.搜索树的概念2.二叉搜索树的简单实现2.1查找2.2插入2.3删除2.4修改3.二叉搜索树的性能 1.搜索树的概念 二叉搜索树是一种特殊的二叉树,又称二叉查找树,二叉排序树,...
    99+
    2024-04-02
  • C++LeetCode0538二叉搜索树转换累加树示例
    目录LeetCode 538把二叉搜索树转换为累加树方法一:DFS反向中序遍历AC代码C++LeetCode 538把二叉搜索树转换为累加树 力扣题目链接:lee...
    99+
    2022-12-16
    C++ 二叉搜索树转换累加树 C++ LeetCode
  • C++二叉搜索树BSTree使用详解
    目录一、概念二、基础操作1.查找find2.插入Insert3.中序遍历InOrder4.删除erase三、递归写法1.递归查找2.递归插入3.递归删除四、应用五、题目练习一、概念 ...
    99+
    2023-03-09
    C++二叉搜索树BSTree C++二叉搜索树 C++ BSTree
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作