美文网首页
数据结构-二分搜索树

数据结构-二分搜索树

作者: 羽裳有涯 | 来源:发表于2020-04-08 10:16 被阅读0次

二分搜索树

二分搜索树的每个节点的值:

  • 每个节点的值都大于其左子树的所有节点的值
  • 每个节点的值都小于其右子树的所有节点的值

一般二分搜索树不包含重复元素, 当然也可以定义包含重复元素的二分搜索树

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

下面是二分搜索树的几个样例 ?*


image.png image.png

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

添加元素

由于二分搜索树本身的递归特性, 所以可以很方便的使用递归实现向二分搜索树中添加元素, 步骤如下:

  • 定义一个公共的add方法, 用于添加元素
  • 定义一个递归的add方法用于实际向二分搜索树中添加元素

查找元素

由于二分搜索树没有下标, 所以针对二分搜索树的查找操作, 这里定义一个contains方法, 查看二分搜索树是否包含某个元素, 返回一个布尔型变量, 这个查找的操作一样是一个递归的过程, 具体代码实现如下:

遍历操作

  • 遍历操作就是把所有的节点都访问一遍
  • 访问的原因和业务相关
  • 遍历分类

深度优先遍历 :

  • 前序遍历 : 对当前节点的遍历在对左右孩子节点的遍历之前, 遍历顺序 : 当前节点->左孩子->右孩子
  • 中序遍历 : 对当前节点的遍历在对左右孩子节点的遍历中间, 遍历顺序 : 左孩子->当前节点->右孩子
  • 后序遍历 : 对当前节点的遍历在对左右孩子节点的遍历之后, 遍历顺序 : 左孩子->右孩子->当前节点
    广度优先遍历 :
  • 层序遍历 : 按层从左到右进行遍历

前序遍历

  • 最自然的遍历方式
  • 最常用的遍历方式

这里一样使用递归来实现遍历, 对于一颗二分搜索树进行遍历, 如果要使用非递归方式实现的话, 可以使用一个栈来赋值进行遍历, 代码如下:

相关文章

  • 手敲数据结构——使用二分搜索树实现Set

    关于实现二分搜索树,可以看前面的文章 手敲数据结构——二分搜索树

  • AVL 树

    一:什么是 AVL 树? 在我的上一篇文章《二分搜索树与二分查找法》中,详细介绍了二分搜索树这种数据结构。二分搜索...

  • 二分搜索树

    什么是二分搜索树?二分搜索树:二分搜索树动态数据结构,里存储的数据必须具有可比性,所以泛型要实现每个结点最多有两个...

  • 玩转数据结构6-集合与映射

    上节课学习了二分搜索树这样一种有序数据结构 ,本节课将借助二分搜索树来实现更高级的数据结构--集合与映射。 1. ...

  • 8-玩转数据结构-堆

    前面我们介绍了二分搜索树,以及通过二分搜索树实现的集合和映射这两个更加高层次的数据结构。 树这种数据结构在计算机领...

  • 手敲数据结构——使用二分搜索树实现Map

    关于实现二分搜索树,可以看前面的文章 手敲数据结构——二分搜索树 Map接口 实现代码 测试用例 统计《傲慢与偏见...

  • Day3--搜索树

    在二叉判定树以及二分搜索的基础上,基于二叉树的搜索树产生,该数据结构可以随时进行调整,可以保证高效的搜索效率。 内...

  • 排序算法——冒泡排序

    前面介绍了几个常用的数据结构,还剩下两个数据结构:树和图。这两个结构理解概念较为容易,比如树的基本概念,二分搜索树...

  • 算法与数据结构系列之[二分搜索树-上]

    前几篇介绍了二叉树以及二叉树的遍历,接下来三篇介绍下二分搜索树。 1.什么是二分搜索树 二分搜索树(Binary ...

  • 6-玩转数据结构-二分搜索树

    之前我们的课程都在关注线性的数据结构,我们从本章开始学习树结构,二分搜索树。 树结构: 线性数据结构是将数据排成一...

网友评论

      本文标题:数据结构-二分搜索树

      本文链接:https://www.haomeiwen.com/subject/sudzphtx.html