二叉树基础概念

news2024/9/24 9:21:25

1.二叉树种类

1.1 满二叉树

满二叉树:如果一棵二叉树只有度为 0 0 0 的结点和度为 2 2 2 的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

如图所示:
在这里插入图片描述

这棵二叉树为满二叉树,也可以说深度为 k k k,有 2 k − 1 2^k-1 2k1 个节点的二叉树。

图中二叉树的深度为4,叶子节点个数= 2 4 − 1 = 15 2^4-1=15 241=15

1.2 完全二叉树

什么是完全二叉树?

完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h h h 层,则该层包含 1 1 1~ 2 ( h − 1 ) 2^{(h-1)} 2(h1) 个节点。
在这里插入图片描述

优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。

1.3 二叉搜索树

二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

下面这两棵树都是搜索树:
在这里插入图片描述

1.4 平衡二叉搜索树

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
如图:
在这里插入图片描述
最后一棵 不是平衡二叉树,因为它的左右两个子树的高度差的绝对值超过了 1 1 1

2.二叉树的存储方式

二叉树可以链式存储,也可以顺序存储。

那么链式存储方式就用指针, 顺序存储的方式就是用数组。

顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在散落在各个地址的节点串联一起。

链式存储如图:
在这里插入图片描述
顺序存储的方式如图:
在这里插入图片描述

用数组来存储二叉树如何遍历的呢?

如果父节点的数组下标是 i i i,那么它的左孩子就是 i ∗ 2 + 1 i * 2 + 1 i2+1 ,右孩子就是 i ∗ 2 + 2 i * 2 + 2 i2+2

但是用链式表示的二叉树,更有利于我们理解,所以一般我们都是用链式存储二叉树。

所以大家要了解,用数组依然可以表示二叉树。

3.二叉树的遍历方式

二叉树主要有两种遍历方式:

  1. 深度优先遍历:先往深走,遇到叶子节点再往回走。
  2. 广度优先遍历:一层一层的去遍历。

那么从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式:

  • 深度优先遍历
    • 前序遍历(递归法,迭代法)
    • 中序遍历(递归法,迭代法)
    • 后序遍历(递归法,迭代法)
  • 广度优先遍历
    • 层次遍历(迭代法)

这里前中后,其实指的就是中间节点的遍历顺序

看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中
    在这里插入图片描述

二叉树中深度优先和广度优先遍历实现方式,我们做二叉树相关题目,经常会使用递归的方式来实现深度优先遍历,也就是实现前中后序遍历,使用递归是比较方便的。

之前我们讲栈与队列的时候,就说过栈其实就是递归的一种是实现结构,也就说前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的。

而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。

4.二叉树的定义

class TreeNode: 
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶企业面临哪些数据安全挑战?

近期,“特斯拉员工被曝私下分享用户隐私”不可避免地成了新闻热点,据说连马斯克也不能幸免。 据相关媒体报道,9名前特斯拉员工爆料在2019年至2022年期间,特斯拉员工通过内部消息系统私下分享了一些车主车载摄像头记录的隐私视频和…

JVM|为对象分配内存空间的流程

1. Eden是否能装下新对象? 1.1 如果可以,则装入新对象; 1.2 如果不可以,则发动minor gc; 2. minor gc后Eden空间是否能装下新对象? 2.1 如果可以,装入新对象; 2.2 如果不可以&#…

长安链引入全新身份认证体系IBC:突破公钥不可理解的限制

近日,未来区块链与隐私计算高精尖创新中心研究团队为长安链带来了一套基于国密SM9算法的全新标识身份认证体系IBC(Identity-Based Cryptography)。该项成果融合标识密码和现代身份管理体系,打破区块链数字身份监管难、管理难、联通…

优维低代码:第三方接口接入

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…

淌入客户市场的“深水区”,锐捷云桌面体验再升级

作者 | 曾响铃 文 | 响铃说 现阶段,云桌面的普惠价值随着行业应用的深化正在不断突显。 以教育为例,教育信息化建设已经跨过了从无到有的阶段,目前正面临着如何降本增效的问题。云桌面的应用,正在有效地解决这个问题。 在响铃…

Java基础:数据类型会考什么?

本文列举一些关于Java基础的数据类型相关考点,方便以后复习查看 Java 中的哪几种基本数据类型了解么?它们的默认值和占用空间大小知道不? 说说这八种数据类型对应的包装类型 基本类型和包装类型的区别? int 和 Integer 的区别 为什么要有包装类型 ? …

Parallels Desktop for Mac 适用于苹果 macOS 的 PD 虚拟机(安装使用详细教程)

简介 Parallels Desktop for Mac 是一款适用于苹果 macOS 操作系统的虚拟机软件,可以让用户在 Mac 上运行 Windows、Linux 等其他操作系统,同时也可以在虚拟机中安装其他软件和应用程序。Parallels Desktop for Mac 还提供了许多实用的功能,…

窗口看门狗(WWDG)实验

窗口看门狗 窗口看门狗(WWDG )通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 除非递减计数器的值在 T6 位( WWDG -->CR 的第六位)变成 0 前被刷新,看门狗电路…

ROS小乌龟话题改写--话题发布--话题订阅

创建小乌龟 roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key2:图显示: rqt_graphtest02_sub_pose 3:通过命令显示话题名消息信息 方法一获得: rostopic info /turtle1/cmd_vel方法二获得&#…

Linux 提权学习

提权的目的是获取 root 权限 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展 暴力破解 suid 提权 内核漏洞提权 定时任务提权 sudo 提权 第三方服务提权(docker、mysql、redis、NFS提权…

量子退火Python实战(4):PyQUBO使用攻略 MathorCup2023加油!

文章目录 前言一、约束部分的QUBO怎么求?二、PyQUBO的输出结果怎么不是QUBO矩阵?三、我的建模太复杂了,可以不用PyQUBO吗?四、怎么构建sum(x_1...x_i) K的约束?总结 前言 提示:本教…

3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(上) | 达索系统百世慧®

基于3DEXPERIENCE单一数据源、实时多专业协同平台;传统CATIA建模附加全新CATIA柔性快速建模技术;CATIA原生概念建模仿真一体化模型;一模两用,快速建模与变更、多学科快速验证与自动优化、支持快速概念方案决策;仿真效率…

快手社招Java后端开发岗面试,被问麻了

社招面试是基于你的工作项目来展开问的,比如你项目用了 xxx 技术,那么面试就会追问你项目是怎么用 xxx 技术的,遇到什么难点和挑战,然后再考察一下这个 xxx 技术的原理。 今天就分享一位快手社招面经,岗位是后端开发&…

日常记录:天梯赛练习集L1-044 稳赢

题目: 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需…

软件测试能干多久?测试员能干到多大年龄?

测试员可以工作多少年?大多数人认为软件测试是吃青春饭的工作。只能干到30岁,最长可达35岁。我经常听到这样的话,都让人倍感压力。今天,我们来谈谈这个老话题… 软件测试能干多久? 软件测试并没有明确的职业寿命限制&#xff…

【高项】项目的概念,项目管理基础与立项管理

【高项】项目的概念,项目管理基础与立项管理 文章目录1、什么是项目?项目的概念2、项目管理知识体系2.1 组织结构对项目的影响2.2 信息系统项目的生命周期2.3 单个项目的管理过程3、立项管理3.1 熟悉立项的流程(申请书->可行性->评估-&…

【《C Primer Plus》读书笔记】第16章:C预处理器和C库

【《C Primer Plus》读书笔记】第16章:C预处理器和C库16.1 翻译程序的第一步16.2 明示常量:#define16.2.1 记号16.2.2 重定义常量16.3 在#define中使用参数16.3.1 用宏参数创建字符串:#运算符16.3.2 预处理器黏合剂:##运算符16.3.…

@SpringBootApplication详细分析

如下图 SpringBootApplication是springboot项目启动类的注解,也是程序的入口,本文就是具体解析一下这个注解到底做了什么 一.SpringBootApplication的构成 1.这个注解是一个组合注解,他是有三个注解合成的,对应图中的123步,而这三…

【HDR图像处理】HDR图像的色调映射 | python+opencv代码实现总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前提opencv知识1.1、opencv打开一般照片并且显示1.2、opencv打开HDR图像(这里先不讲如何imshow) 二、经典的色调映射技术以及opencv…

Web 攻防之业务安全:密码找回流程绕过测试.(利用链接跳到后面去)

Web 攻防之业务安全:密码找回流程绕过测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所…