一网打尽二叉树系列

简介: 文章全面介绍了二叉树的定义、分类和搜索(遍历)方式,包括满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树的概念,以及前序、中序、后序和非递归遍历方法,旨在帮助读者深入理解二叉树的基本概念和应用场景。

前言

算法是计算机软件的基础,常见算法是软件开发的核心基本功,今年打算深入学习一些算法,记录一些算法理论以及最佳实践,希望可以坚持下去,关注我,我们一起学习,增强我们的基本功。

一、二叉树定义

二叉树是一种数据结构,每个树节点的子节点最大数量是2。

image.png

二、二叉树分类

满二叉树: 二叉树上,除了叶子结点的子节点(度)为0,其他节点子节点(度)都是2。

image.png

完全二叉树: 二叉树上,除了最下面一层外,每一层的节点都被填满,且最后一层的节点都集中在左侧,也就是最下面一层节点是从左到右连续的。

image.png

二叉搜索树:二叉搜索树是每个节点必须比左节点大,比右节点数值小。这样的特性使二叉搜索树是有序的。

image.png

二叉搜索树可能出现不平衡的情况,最坏的情况导致二叉树退化为链表

image.png

平衡二叉搜索树:由于二叉搜索树会出现不平衡,所以有了平衡二叉树,在平衡二叉树中,任意节点的左子树和右子树的高度差不能超过1

image.png

三、二叉树搜索(遍历)方式

二叉树使用场景非常多的就是需要遍历树,从树上查找目标数据,比如Mysql的索引数据结构就是树,查找数据都需要从树中查找。

递归遍历

递归遍历分为前序,中序,后序遍历,怎么理解呢?是指访问父节点的顺序,也是访问当前节点的顺序。比如前序遍历,就是先访问当前节点(父节点),再访问左节点最后访问右节点

前序遍历:遍历顺序分别是父节点,左节点,右节点。

image.png

前序遍历遍历结果:9、4、1、7、11

中序遍历:遍历顺序分别是左节点,父节点,右节点。

image.png

中序遍历遍历结果:1、4、7、9、11

后序遍历:遍历顺序分别是左节点,右节点,父节点。

image.png

后序遍历遍历结果:1、7、4、11、9

  • 非递归遍历

非递归遍历树是使用循环的方式遍历。

总结

本文分析了二叉树各个类型的特点,我们可以快速全面了解二叉树,二叉树在我们技术底层框架使用比较多,比如mysql,了解这些基础知识对于二叉树的深入应用是有帮助的。

关注我,我们一起学习技术干货。

服务端技术栈.png

相关文章
|
机器学习/深度学习 编解码 人工智能
Reading Notes: Human-Computer Interaction System: A Survey of Talking-Head Generation
由于人工智能的快速发展,虚拟人被广泛应用于各种行业,包括个人辅助、智能客户服务和在线教育。拟人化的数字人可以快速与人接触,并在人机交互中增强用户体验。因此,我们设计了人机交互系统框架,包括语音识别、文本到语音、对话系统和虚拟人生成。接下来,我们通过虚拟人深度生成框架对Talking-Head Generation视频生成模型进行了分类。同时,我们系统地回顾了过去五年来在有声头部视频生成方面的技术进步和趋势,强调了关键工作并总结了数据集。 对于有关于Talking-Head Generation的方法,这是一篇比较好的综述,我想着整理一下里面比较重要的部分,大概了解近几年对虚拟人工作的一些发展和
|
SQL 关系型数据库 MySQL
mysql下出现Unknown column ‘xx‘ in ‘on clause‘的完全解决方法
mysql下出现Unknown column ‘xx‘ in ‘on clause‘的完全解决方法
844 0
|
11月前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
227 1
003 Qt_信号和槽-上
|
存储 监控 Linux
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
320 1
|
缓存 Kubernetes 负载均衡
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用
1190 0
|
Kubernetes 持续交付 开发者
使用 Docker 和 Kubernetes 实现持续集成和持续部署(CI/CD)
使用 Docker 和 Kubernetes 实现持续集成和持续部署,可以为开发团队带来更高效、稳定的交付流程。这种自动化的部署方式能够显著提高交付速度、降低发布风险,并为应用的扩展和管理提供了强大的工具。然而,构建一个完善的 CI/CD 环境需要根据团队的需求和实际情况进行调整和优化。
2326 1
使用 Docker 和 Kubernetes 实现持续集成和持续部署(CI/CD)
|
Java 数据库连接 数据库
【万字长文】Java面试八股文:深入剖析常见问题与解答
【万字长文】Java面试八股文:深入剖析常见问题与解答
1983 0
|
Nacos Java Spring
Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议
Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议。本文将介绍包括这个功能在内的新版本发布的功能。 升级指南 服务端 0.8.0及以上版本:解压安装包后替换{nacos.home}/target/nacos-server.jar逐台重启Nacos Server即可 0.8.0以下版本,先升级到1.0.0版本。
5106 101
|
关系型数据库 Shell Nacos
【SpringCloud-Alibaba系列教程】16.动态配置yml以及分布式事务
动态配置yml、分布式事务以及使用seata。
1232 1
【SpringCloud-Alibaba系列教程】16.动态配置yml以及分布式事务