数据结构与算法-二叉树

数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组、链表)、栈与队列、树(二叉树、二叉查找树、平衡二叉树、红黑树)、图。 本文主要介绍树中的常见的二叉树数据结构。包括 概念简介 二叉树中树节点的数据结构(Java) 二叉树的遍历(Java) 常见的二叉树算法题(Java) 概念简介 如果对二叉 阅读详情

二叉树的基本概念

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)

二叉树的性质(特性)

性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)
性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)
性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)
性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2(i=1 时为根,除外)

典型的两种二叉树

  1. 完全二叉树
  2. 满二叉树

(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树

(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树

 

二叉树的节点表示以及利用【队列】创建一棵树

通过使用Node类中定义三个属性,分别为elem本身的值,还有lchild左孩子和rchild右孩子

class Node(object):
    """节点类"""
    def __init__(self, elem=-1, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild

树的创建,创建一个树的类,并给一个root根节点,一开始为空,随后添加节点

这里我们用了一个队列,来存放每个节点,从根节点开始,通过判断节点是否为None 来添加最新的子节点

若一开始根节点为None,那么新增的节点就直接置为根节点,如果不为None,依次判断其左子树和右子树是否为none,再往其下添加最新的节点

详细代码示例如下:

class Tree(object):
    """树类"""
    def __init__(self, root=None):
        self.root = root

    def add(self, elem):
        """为树添加节点"""
        node = Node(elem)
        #如果树是空的,则对根节点赋值
        if self.root == None:
            self.root = node
        else:
            queue = []
            queue.append(self.root)
            #对已有的节点进行层次遍历
            while queue:
                #弹出队列的第一个元素
                cur = queue.pop(0)
                if cur.lchild == None:
                    cur.lchild = node
                    return
                elif cur.rchild == None:
                    cur.rchild = node
                    return
                else:
                    #如果左右子树都不为空,加入队列继续判断
                    queue.append(cur.lchild)
                    queue.append(cur.rchild)

 

数据结构与算法——树和二叉树 1、二叉树:是n个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别称作这个根左子树和右子树的二叉树组成。2、特点:(1)每个结点最多有两个孩子(2)子树有左右之分,其次序不能颠倒(3)二叉树可以是空集合,根可以有空的左子树或空的右子树3、二叉树的性质(1)性质1:在二叉树的第i层上至多有个结点(i>=1)(2)性质2:深度为k的二叉树至多有个结点(k>=1)(3)性质3:对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1。 阅读详情

相关推荐

【数据结构和算法】二叉树详解,动图+实例

???? 作者:Linux猿 ???? 简介:优快云博客专家????,华为云享专家????,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! ???? 关注专栏:图解数据结构和算法(优质好文持续更新中……)???? ???? 欢迎小伙伴们点赞????、收藏⭐、留言???? 【数据结构和算法】超详细,保姆级,动图详解,就怕你不会,二叉树详解 一、什么是二叉树 二、二叉树遍历 2.1 前序遍历 2.2 中序遍历 2.3 后续遍历 2.4 层次遍历 三、二叉

Muti-Agent 1万+

二叉树is what

二叉树二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则...

qq_39871740的博客 317

二叉树算法与数据结构的探索

本文深入探讨了二叉树数据结构在不同算法中的应用,包括算法的初始化、检查、遍历、插入以及树的等价性证明等。通过对给定书籍章节内容的分析,我们揭示了二叉树算法设计的复杂性和逻辑严谨性,以及在实际应用中的效率和局限性。

weixin_34598113的博客 407

【数据结构】二叉树的顺序存储

原理 对于具有n个节点的完全二叉树,如果按照从上至下和从左至右的顺序对所有节点序号从0开始顺序编号,则对于序号为 i(0<=i < n)的节点有: 1)如果i〉0,则序号为i节点的双亲节点的序号为(i-1)/2(/为整除);如果i=0,则序号为i节点为根节点,无双亲节点。 2)如果2i+1 < n,则序号为i节点的左孩子节点的序号为2i+1;如果2i+1>=n...

weibo_dm的博客 1344

新手网工别慌!手把手带你搞定华为OLT开局配置(从登录到业务下发全流程)

本文为新手网络工程师提供华为OLT设备开局配置的详细指南,涵盖从设备登录、基础配置到业务部署的全流程。通过实战案例和常见问题排查,帮助读者快速掌握华为OLT配置技巧,确保业务顺利开通。

weixin_33721344的博客 484

PTPX功耗分析实战——从脚本配置到报告解读

本文详细介绍了PTPX功耗分析的全流程,从脚本配置到报告解读,帮助工程师快速掌握芯片设计中的功耗估算技术。文章涵盖了环境搭建、波形文件处理、功耗报告解析等关键环节,并提供了实战经验和优化建议,特别适合需要提升PTPX功耗分析效率的开发者。

weixin_29248313的博客 279

二叉树

二叉树理解 n(n>=0)个结点的有限集合,由一个根结点和两个互不相交的子结点,左子树和右子树组成的树形结构。 二叉树的性质 在二叉树的第i层上至多有2^(i-1)个结点(i>0) 如上图第3层有 结点数:2^(3-1) = 4 具有n个结点的完全二叉树的深度必为log₂n+1 如上图有结点7个 深度:log₂7+1 =...

代码黑洞 1640

数字孪生实战:如何用Blender+Unity快速搭建未来工厂3D模型(附资源包)

本文提供了一套利用Blender进行三维建模,再结合Unity构建虚拟仿真环境的实用方案,旨在帮助中小型制造企业低成本、高效率地搭建未来工厂数字孪生原型系统。文章详细介绍了从数据规划、模型优化到场景构建、逻辑仿真与数据对接的全流程,并附有资源包,助力技术团队快速实现从静态展示到动态交互的数字孪生应用。

weixin_29191669的博客 341

二叉树结构与算法思路解析

二叉树 介绍 主要内容 二叉树的概念和性质 二叉树的存储结构 遍历二叉树 递归遍历 非递归遍历 线索二叉树 哈夫曼树 树和森林 树和森林的存储 树和森林与二叉树的转换 树和森林的遍历 树型结构特点 一对多 例: 自然界,树 人类社会,家谱,新政组织结构 计算机领域 操作系统的文件组织结构 基于26个字母索引的查找树等 编译原理中表达式求值操作等 一:树和二叉树的基本概念 树的定义 树是n(n>=0)个结点的有限集合,在任一棵非空树中: 有且仅有一个称为根的结点; 其余结

weixin_46297209的博客 3929

CubeMX实战:ETH+LWIP+FreeRTOS网络工程从零搭建与AC6编译优化

本文手把手教你使用STM32CubeMX从零搭建集成以太网(ETH)、LWIP协议栈和FreeRTOS的嵌入式网络工程。文章详细解析了外设配置、协议栈调优、任务规划等关键步骤,并重点分享了如何解决ARM Compiler 6(AC6)的兼容性问题,实现编译速度与稳定性的双重提升,助你快速构建稳定的网络应用原型。

n2o3p4的博客 410

自学ROS完成智能小车路径规划(一)--配置功能包

此系列文章记录本人学习ros的过程,将会尽可能详细以便自己能够看懂 参考系列:古月居老师,优快云,ROS tutorials,科大讯飞智能车竞赛线上赛 本文章的目标: 比较全局路径规划算法中A*算法与Dijkstra算法在该地图场景下的规划与运行时间 比较局部路径规划算法中DWA算法与TEB算法在该地图场景下的规划与运行时间 在同等参数条件下选择出各自适合的算法进行融合,经过比较,我将选择dijkstra算法作为全局路径规划算法,TEB算法为局部路径规划算法 第一步,按照科大讯飞的教程配置文件 科大讯

weixin_42621524的博客 9366

数据结构和算法 - 二叉树 - 相关概念

文章目录一、树1、空树2、节点的度3、叶子节点4、层数5、节点的深度6、高度7、树的深度等于树的高度8、有序树9、无序树二、二叉树1、二叉树的特点2、二叉树是有序树吗?3、二叉树的性质4、真二叉树5、满二叉树极其相关的性质6、完全二叉树7、完全二叉树的性质面试题目(计算叶子节点的数目)8、真二叉树,满二叉树,完全二叉树的区别三、二叉搜索树(binary search tree)1、二叉搜索树的相关性质2、二叉搜索树的接口设计 一、树 一个树只有一个根节点 父节点 兄弟节点 子节点 兄弟节点 1、空树 没有任

CodeDoraemon的博客 554

Reality Capture控制点修复/合并模型

通过增加控制点/修改对齐设置参数来修复模型被分为两个部分的解决方法

草履虫建模的博客 5254

数据结构与算法-树、二叉树与BST

对于BST而言,插入一个节点主要是要保持其“小-中-大”的逻辑不变,因此插入的节点的逻辑可以从根节点开始,一步步寻找新节点的“最终归宿”,比如在如下BST中,要插入新节点16,最终应该插入到节点17的左孩子处。由于在顺序存储,数据元素之间的逻辑关系是用物理位置来表达的,而二叉树中每一个节点都有一个对应的标号,因此可以使用标号来作为数组的下标,但除非是完美或者完全二叉树,否则会浪费存储空间,如下图所所示。其中8是根节点,14是10的右孩子(因为二叉树是有序树,因此严格区分左右),而13则是14的左孩子。

m0_74147998的博客 962

《QGIS快速入门与应用基础》【专栏完整目录】

《QGIS快速入门与应用基础》第一卷专栏完整目录,覆盖 001–328 全部篇目与附录,逐篇可跳转。

LuckyHanMo的博客 1302

基于FFT的轴承故障诊断 - MATLAB代码和详细解释

最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。

COWizard的博客 613

数据结构与算法:二叉树

这个while循环结束后吗,二叉树中的所有结点全部过了一遍,就算有 没有入队列的结点,也没有关系,因为这时只需要判断现在的队列中,是否还存在数据,如果存在,则说明不是完全二叉树,返回false。但是一定要记录这个节点,因为递归返回会销毁函数栈帧,你不返回给上层这个找到的节点的记录,上层不知道你找到没有,就认为没有找到。比如说,求第3层结点的个数,那么对这棵树的第一层来说,从它开始,求它向下的3层。2、在操作系统中,树是一种用于表示文件系统的结构,其中根目录位于树的顶部,子目录和文件位于根目录下 [3]。

2303_80078385的博客 1208

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言数据结构与算法(二叉树)

二叉树及堆的实现(常用的函数及一些特殊函数)和涉及一些实用数据结构与算法。

2301_81978155的博客 1698

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构与算法——树与二叉树

树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观来看,树是以分支关系定义的层次结构。树型结构在客观世界中广泛存在,比如人类社会中的祖辈关系,社会机构组织等等都可以用树来形象表示。树型结构在计算机领域中也得到了广泛应用。

小田是个程序员的博客欢迎你的到来呀~ 2320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++数据结构与算法——二叉树的修改与构造

C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用来学习,刷题使用力扣网站,不定时更新,欢迎关注!

weixin_63866037的博客 751

算法与数据结构 判断选择程序填空 二叉树

1-1在二叉排序树中,每个结点的关键字都比左孩子关键字大,比右孩子关键字小。T 1-2若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为…A…B…,而中序遍历序列为…B…A…。 F 1-3完全二叉树中,若一个结点没有左孩子,则它必是树叶。 T 1-4完全二叉树一定存在度为1的结点。 F 1-5将一棵完全二叉树存于数组中(根结点的下标为1)。则下标为23和24的两个结点是兄弟。 F 1-6若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。F

weixin_47073308的博客 8358

数据结构——链表、二叉树、排序算法

链表(线性) 概念 一种存储结构,每一个数据元素 ai 都有两个部分组成:存储本身信息的数据域和一个存储其后继信息的指针域(组成一个结点);指针域中存储的信息称为指针或链。n个结点链结成一个链表(线性链表)。 整个链表的存取必须从一个头指针开始进行,头指针指向链表的第一个结点的存储位置,由于最后一个数据元素没有直接后续,所以链表的最后一个结点的指针为空(null)。 链表的插入 链表的删除...

weixin_30295091的博客 540

数据结构与算法 二叉树

二叉树

weixin_44201373的博客 296

二叉树算法--数据结构课程设计

题目要求: 二叉树算法设计 TXT文件内容(Btree.txt): 1 2 4 8 0 0 9 0 0 5 0 0 3 6 0 0 7 0 0 一定注意,这里文件按照前序遍历的数字形式,空树按照0进行表示,每个数字间空格,这样能区分十位数还是个位数,并且只能是纯数字 代码展示: #include<iostream> #include<stdio.h> #include<malloc.h> #include<queue> #include <string.

weixin_44965308的博客 1270
上一篇: 数据结构与算法-树与树的算法开篇
下一篇: 数据结构与算法-二叉树的遍历(含非递归)
LELELED
博客等级 码龄9年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值