版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_37609579/article/details/99687256

一、计算机科学中的树

二、二叉树的定义
一棵树,它的每个节点最多只能有两个子节点,此时就叫二叉树。(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树。如果节点多于两个,我们也称之为多路树)

可以看出: 满二叉树一定是完全二叉树;完全二叉树不一定是满二叉树。
如果我们给二叉树加一个额外的条件,就可以得到一种被称作二叉查找树(binary search tree)的特殊二叉树。
二叉查找树要求:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。【左边下边小,右边上边大

三、二叉查找树的日常操作
PS:二叉树很多,但对我们来说,在实际的应用中,二叉排序树的应用比较多。1.插入新节点
假设我们要为数组 a[] = {10 , 5 , 15 , 6 , 4 , 16 }构建一个二叉排序树,我们按顺序逐个插入元素。

插入过程是这样的:
如果是空树,则创建一个新节点,新节点作为根,因此以元素10构建的节点为该二叉查找树的根。

  • 插入5,5比10小,与10的左孩子节点进行比较,10的左孩子节点为空,进行插入。
  • 插入15,15比10大,与10的右孩子节点进行比较,10的右孩子节点为空,进行插入。
  • 插入6,6比10小,与10的左孩子节点5比较;6比5大,与5的右孩子节点进行比较,5的右孩子为空,进行插入。
  • 插入4,4比10小,与10的左孩子节点5比较;4比5小,与5的左孩子节点进行比较,5的左孩子为空,进行插入。
  • 插入16,16比10大,与10的右孩子节点15比较;16比15大,与15的右孩子节点进行比较,15的右孩子为空,进行插入。

从这个过程我们可以总结出插入新元素的步骤:

  • 寻找元素合适的插入位置:新元素与当前结点进行比较,若值大于当前结点,则从右子树进行寻找;否则从左子树进行寻找.
  • 找到插入位置之后,以元素的值构建新节点,插入二叉排序树中。

2.遍历平衡二叉树
【百度百科】平衡二叉搜索树,又被称为AVL树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

遍历平衡二叉树,就是以某种方式逐个“访问”二叉树的每一个节点。举例说明:

前序遍历

  • 访问根结点中的数据
  • 前序遍历左子树
  • 前序遍历右子树
    前序遍历结果:
    1, 2, 4, 8, 9, 5, 10, 3, 6, 7

中序遍历

  • 中序遍历左子树
  • 访问根结点中的数据
  • 中序遍历右子树
    中序遍历结果:
    8, 4, 9, 2, 10, 5, 1, 6, 3, 7

后序遍历

  • 后序遍历左子树
  • 后序遍历右子树
  • 访问根结点中的数据
    后序遍历结果:
    8, 9, 4, 10, 5, 2, 6, 7, 3, 1

层次遍历

  • 访问根结点中的数据
  • 访问第二层所有结点的数据
  • 访问第三层所有结点的数据
  • ……
    层次遍历结果:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10

3.删除节点
删除二叉排序树的某个节点有三种情况:

  • 被删除节点同时有左子树与右子树。将前驱节点的值保存在当前结点,继而删除前驱节点。
  • 被删除节点只有左子树或只有右子树。直接用子树替换被删节点。
  • 被删除节点没有子树。可以直接删除节点。

4.查找最值元素
二叉排序树的最小值位于其最左节点上;最大值位于其最右节点上

我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

四、参考资料https://blog.csdn.net/wannuoge4766/article/details/83998377https://www.cnblogs.com/shixiangwan/p/7530015.htmlhttps://www.cnblogs.com/ysocean/p/8032642.htmlhttps://blog.csdn.net/u014634338/article/details/42465089http://www.it610.com/article/3607922.htm

二叉树为空意味着二叉树_程序员的进阶课-架构师之路(8)-二叉树相关推荐

  1. 根据id获取多维数组路径_程序员的进阶课-架构师之路(2)-数组

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  2. 程序员的进阶课-架构师之路(17)-堆

    我们来介绍另外一种数据结构-堆,注意这里的堆和我们Java语言,C++语言等编程语言在内存中的"堆"是不一样的,这里的堆是一种树,由它实现的优先级队列的插入和删除的时间复杂度都为O ...

  3. 程序员的进阶课-架构师之路(7)-树的概念

    接下来我们将会介绍另外一种数据结构--树.二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构.那么为什么要使用树?它有什么优点? 前面我们介绍数组的数据结构,我们知道对于有序 ...

  4. 程序员的进阶课-架构师之路(8)-二叉树

    一.计算机科学中的树 二.二叉树的定义 一棵树,它的每个节点最多只能有两个子节点,此时就叫二叉树.(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树.如果节点多于两个,我们也称之为 ...

  5. 树复制替换id_程序员的进阶课-架构师之路(12)-2-3-4树

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  6. 程序员的进阶课-架构师之路(13)-B-树

    一.什么是B-树(B-Tree) B树是平衡多叉树,可以看做是对2-3树的一种扩展,即允许每个节点有最多M个子节点,其中M为B树的阶.每个节点的多个key按升序排列,且有 节点所含key值的个数 =  ...

  7. 程序员的进阶课-架构师之路(12)-2-3-4树

    一.2-3-4树的定义 2-3-4树就是一种4阶的多叉树,它像红黑树一样是平衡树,可以保证在O(lgn)的时间内完成查找.插入和删除操作,容易实现,但是效率比红黑树稍差. 2-3-4树每个节点最多有四 ...

  8. 程序员的进阶课-架构师之路(9)-平衡二叉树(AVL树)

    一.平衡二叉树的定义 对一棵查找树(search tree)进行查询/新增/删除 等动作, 所花的时间与树的高度h 成比例, 并不与树的容量 n 成比例.如果可以让树维持矮矮胖胖的好身材, 也就是让h ...

  9. 程序员的进阶课-架构师之路(5)-队列

    一.队列的定义 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操 ...

最新文章

  1. 数据安全引担忧?get它,让你吃一颗“定心丸”
  2. 【矩阵运算c++实现】矩阵封装实现Matrix类
  3. css火狐 hover 图片会重新请求,在“unhovering”之后使CSS Hover状态保持不变
  4. Delphi - 数组 详解
  5. 定时任务:Java中Timer和TimerTask的使用
  6. 宝藏文章!【CCNA命令大全】
  7. nginx资源定向 css js路径问题
  8. -Block和JSON
  9. Red Hat 6.5安装Oracle 10g故障汇总
  10. User Word Automation Services and Open XML SDK to generate word files in SharePoint2010
  11. Mysql 电商常用的时间操作(当天,昨天,7天,30天,半年,全年,季度等等)...
  12. 基于DEAP库的python进化算法-1
  13. stardict词典全集
  14. 文件传输的服务器软件有哪些,好用的数据传输软件有哪些?专业的数据传输软件排行榜...
  15. 2021最新软件测试面试题(含答案)
  16. 串口通信协议---UART
  17. win10 增加右键在此处打开命令行菜单
  18. Pulling 1 repository Exception caught during execution of merge command
  19. [Java]Maven学习笔记(尚硅谷2022)
  20. 11对战平台服务器怎么修改,11对战平台无法登陆的解决方法

热门文章

  1. PE转换分区表格式为GPT
  2. 发送请求_发送soap请求调用wsdl服务
  3. oracle虚拟机 centos6.5,虚拟机oracle virtualbox 上安装centos6.5 网络设置
  4. laravel redis mysql_Laravel 5.1 Redis 缓存配合 MySQL 数据库实现「用户最后活跃时间」功能...
  5. python返回元组_python – numpy.where返回一个元组的目的是什么?
  6. oracle监听 客户 实例,oracle 数据库实例 监听
  7. vc 6.0 显示文件全路径_Linux常用命令大全(非常全!!!)
  8. re搜索字符串与find字符串不一样的结果
  9. 对拉格朗日乘子法与KKT的理解
  10. 扬州ns服务器维修视频,NS连接服务器报错问题解决方法--给遇到同样问题的盆友...