二叉搜索树BST定义:

基于广义二叉树,一颗二叉树定义:或者为空 或者包含三部分:一个值,一个左分支和一个右分支。这两个分支也都是二叉树分支。一颗二叉搜索树是满足下面条件的二叉树:所有左分支的值都小于本节点的值;本节点的值小于所有右分支的值;所以这也代表了BST中的value应当是能够进行大小比较的。

数据结构表示:

通过链表进行表示时,会分为两大部分:value区与索引区:索引区分为left right两个区域,自己实现在某些情况下能够用上parent;value是树中所保存的关键信息;

对于BST书上讲解了四种操作:插入 遍历 搜索 删除

插入:

我们可以使用下面的算法向一颗二叉搜索树插入一个键K:

 如果树为空,创建一个叶子节点,令该节点的key = k; 如果k小于根节点的key,将它插入到左子树中; 如果k大于根节点的key,将它插入到右子树中。

存在一个特殊情况,当k等于根节点的key时,说明已经存在。这个时候可以按照具体需求来操作:如重写数据或者忽略。

插入算法是递归或者递推实现的,可以尝试一下。

遍历:

前序遍历 中序遍历 后续遍历

BST的中序遍历是最有特点的。对BST进行中序遍历,元素会按照从小到大的顺序输出,这个是由二叉搜索树的定义决定的。

遍历这个问题可以先通过递归的方式简单进行实现,理解它的定义。实现后通过递推的方式进行实现,对个人的帮助较大。先序遍历 中序遍历可以通过一个栈空间辅助实现。后序遍历会稍微复杂些,也是通过栈实现,其中的元素需要有一个标志位,确定访问次数,确保左右子树均访问后才能将该节点出栈。

搜索:

二叉搜索树有三种搜索:在树中查找一个key,查找最大或最小的元素;查找给定元素的前驱或者后继。

二叉搜索树非常适合进行元素的查找:

如果树为空,查找失败;如果根节点的key等于查找值,查找成功,返回根节点作为结果;如果待查找的值小于根节点的key,继续在左子树中递归查找;如果待查找的值大于根节点的key,继续在右子树中递归查找;

最小元素和最大元素

利用最小元素在树的最左边,最大元素在树的最右边的特性进行查找;

前驱与后继——>容易让人联想到二叉线索树

在实际使用一些数据结构的时候,前驱和后继意义较大。值得研究一下。

删除一个元素

不用真实的删除,单纯的用一个标记位进行标记?

或者通过递归的方式进行删除

后序线索树怎样画图_算法新解刘新宇(二)二叉搜索树:数据结构中的“hello world”...相关推荐

  1. 算法新解 (刘新宇 著)

    1 转载于:https://www.cnblogs.com/revoid/p/9596065.html

  2. 中序线索树和后序线索树

    约定 Node* Bool Data Bool Node* lchild LTag data RTag rchild LTag=0 时lchild指向左儿子: LTag=1 时lchild指向前驱: ...

  3. 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...

    后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...

  4. 线索二叉树 C语言 数据结构 先序线索二叉树 中序线索二叉树 后序线索二叉树

    在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序.中序.后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化. 文章目录 一.c语言实现先序线索.中序线 ...

  5. 先序abdfcegh 中序bfdagehc 后序线索二叉树_二叉树的遍历和线索二叉树

    二叉树的遍历是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,且只被访问一次. 先序遍历(NLR) 若二叉树为空,则什么也不做:否则, (1)访问根结点. (2)先序遍历左子树. (3) ...

  6. 【算法系列之线索化二叉树,前序线索化、中序线索化、后序线索化以及遍历~】

    1.何谓线索化二叉树 2.线索化二叉树的本质 3.线索化二叉树的存储结构 4.构建线索化二叉树 4.1.先序线索化 4.2.中序线索化 4.3.后序线索化 5.遍历线索化二叉树 5.1.先序遍历 先序 ...

  7. 线索二叉树(前中后序线索化/遍历/画线索)

    线索二叉树 文章目录 线索二叉树 1 线索二叉树的基本概念 2 线索二叉树的构造 2.1 线索二叉树的存储结构 2.2 给线索二叉树画线索 2.2.1 中序 2.2.2 先序 2.2.3 后序 2.3 ...

  8. 后序线索化二叉树及遍历(图解)

    上一篇博客对于 二叉树线索化以及线索化的先序.中序.后序遍历做了比较详细的描述 写在前面 其实,我还是很想把本篇博客和二叉树的线索化写在一块的,但是考虑到可能这博客的内容就看足以超过了上一篇的篇幅,考 ...

  9. 72 中序遍历和后序遍历树构造二叉树

    原题网址:https://www.lintcode.com/problem/construct-binary-tree-from-inorder-and-postorder-traversal/des ...

最新文章

  1. MPB:扬州大学王梦芝组-反刍动物瘤胃原虫18S rRNA测序分析技术
  2. 《社交网站界面设计(原书第2版)》——1.17 模式还是套话
  3. 工业界和学术界的思考
  4. 互联网1分钟 |1203
  5. 混合开发之phonegap开发相关知识解析
  6. Android studio中的NDK开发之NDK环境变量的配置(图文教程)
  7. 01-MyBatis入门程序
  8. 【实验6】——时域波束形成与频域波束形成
  9. java 云 代码_我 - java代码库 - 云代码
  10. 西安电子科技大学计算机系分数线,西安电子科技大学2017年分专业录取分数
  11. 公众号快速搭建淘客机器人教程
  12. 仰望星空,脚踏实地——吴燕生
  13. WCF 面向服务的4个原则
  14. Craps 赌博游戏 含押注
  15. 2020-12-15
  16. echarts 地图外边框投影 阴影立体效果
  17. APP支持文件共享设置(iOS)
  18. 【不忘初心】Windows11_22000.593_X64_无更新[深度精简版][1.37G](2022.4.2)
  19. Java-BigInteger类(详解)
  20. 实体店商家新的出路,dy本地团购你真的了解吗?

热门文章

  1. [紧急问题和解决方案] 无法打开被权限管理服务(RMS)加密的Office 2003文档
  2. onvif发送订阅规则
  3. Android应用开发—onSaveInstanceState方法什么时候被调用?
  4. python判断字典,列表,元组为空的方法。
  5. git 拉取远程其他分支代码_【记录】git 拉取远程分支代码,同步到另一个git上...
  6. Python 内置模块之 ConfigParser - 解析 ini 文件
  7. 偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便
  8. 解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。
  9. 一个服务器多个网站多个域名,多个域名一个服务器吗
  10. php mysql xa事务_XA mysql php 分布式事务