07 二叉树

news/2024/4/19 18:35:14/文章来源:https://blog.csdn.net/weixin_63866037/article/details/129130520

开始系统学习算法啦!为后面力扣和 蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括 概念, 算法运行过程,以及 代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博主哦!今天更新的是 《07 二叉树》

目录

一、树概念

二、性质

三、特殊二叉树

四、二叉树的节点及树的创建

五、二叉树的遍历

5.1深度优先遍历

先序遍历

中序遍历

后续遍历

5.2 广度优先遍历(层次遍历)


一、树概念

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

二、性质

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

三、特殊二叉树

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

满二叉树:除了叶节点外每个节点都有左右子叶且叶子节点都处在最外层的二叉树

四、二叉树的节点及树的创建

  • 节点创建
class Node(object):def __init__(self,elem=-1,lchild=None,rchild=None):self.elem = elemself.lchild = lchildself.rchild = rchild
  • 树的初始化
class Tree(object):def __init__(self,root = None):self.root =root
  • 添加节点
    def add(self,elem):# 首先创建节点node = Node(elem)# 如果树是空的,则对root根赋值if self.root == None:self.root = nodeelse:queue = []queue.append(self.root)# 对已有的节点进行层次遍历while queue:cur = queue.pop(0)if cur.lchild == None:cur.lchild = nodereturnelif cur.rchild == None:cur.rchild = nodereturnelse:#如果左右子树都不为空,加入队列继续判断queue.append(cur.lchild)queue.append(cur.rchild)

五、二叉树的遍历

树的遍历是书的一种重要的运算,所谓遍历是指对树中所有节点的信息的访问,即一次对树中每个节点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traveral)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列,一般情况下能用递归实现的算法大部分也能用堆栈来实现

5.1深度优先遍历

对于一颗二叉树,深度优先搜素(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。

那么深度遍历有重要的三种方法。这三种方式常被用于访问树的节点,他们之间的不同在于访问每个节点的次序不同。这三种遍历分别叫做先序遍历(preorder),中序遍历(inorder),和后序遍历(prstorder)。我们给出详细定义,然后举例看看它们的应用。

  • 先序遍历

在先序遍历中,我们先访问根节点,然后递归使用先序遍历访问左子树,然后再递归使用先序遍历访问右子树。

访问的顺序为:根节点->左子树->右子树

代码实现

class Tree(object):def preorder(self,root):if root == None:returnprint(root.item)self.preorder(root.lchild)self.preorder(root.rchild)
  • 中序遍历

在中序遍历中,我们递归使用中序遍历访问左子树,然后访问根节点,最后再递归使用中序遍历访问右子树

访问顺序为:左子树->根节点->右子树

代码实现

class Tree(object):def inorder(self,root):if root == None:returnself.inorder(root.lchild)print(root.item)self.inorder(root.rchild)
  • 后续遍历

在后续遍历中,我们先递归使用后序遍历访问左子树和右子树,最后访问根节点。

访问顺序为:左子树->右子树->根节点

代码实现

class Tree(object):def postorder(self,root):if root == None:returnself.postorder(root.lchild)self.postorder(root.rchild)print(root.item)

5.2 广度优先遍历(层次遍历)

从树的root开始,从上到下从左到右遍历整个树的节点

代码实现

class Tree(object):def breath_travel(self):if self.root == None:returnqueue = []queue.append(self.root)while queue:node =queue.pop(0)print(node.elem)if node.lchild != None:queue.append(node.lchild)if node.rchild != None:queue.append(node.rchild)

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重要节点排序方法

文章目录研究背景提前约定基于节点近邻的排序方法度中心性(degree centrality, DC)半局部中心性(semilocal centrality, SLC)k-壳分解法基于路径排序的方法离心中心性 (Eccentricity, ECC)接近中心性 (closeness centrality, CC)K…

【图文详解】Unity存储游戏数据的几种方法

Unity3D存储游戏数据的方式1 PlayerPrefs: Unity自带的一种简单的键值存储系统2 ScriptableObject: Unity中最灵活的数据管理工具2.1 如何手动创建和修改数据文件2.2 ScriptableObject优缺点总结3 JSON: 轻量级的数据交换格式3.1 序列化与反序列化3.2 用JsonUtility对对象进行序…

最好的工程师像投资者一样思考,而不是建设者

我在大学期间住在图书馆。“我学习的教科书理论越多,我就会成为一名更好的工程师,”我想。然而,当我开始工作时,我注意到业内最优秀的工程师并不一定比应届毕业生了解更多的理论。他们只是带来了不同的心态,即投资者的…

STM32单片机蓝牙APP空气净化系统甲醛二氧化碳温度SGP30

实践制作DIY- GC0124-蓝牙APP空气净化系统 一、功能说明: 基于STM32单片机设计-蓝牙APP空气净化系统 功能介绍: 硬件组成:STM32F103C最小系统板DS18B20温度传感器OLEDSGP二氧化碳甲醛传感器5V直流风扇多个按键HC-05蓝牙模块(仅蓝…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——MapReduce工作流程

1、流程示意图 MapReduce详细工作流程(一) MapReduce详细工作流程(二) 2、流程详解 上面的流程是整个MapReduce最全工作流程,但是Shuffle过程只是从第7步开始到第16步结束,具体Shuffle过程详解&#xff0…

二进制部署K8S

目录 一、环境准备 1、常见的k8s部署方式 2、关闭防火墙 3、关闭selinux 4、关闭swap 5、根据规划设置主机名 6、在master添加hosts 7、将桥接的IPv4流量传递到iptables的链 8、时间同步 二、部署etcd集群 1、master节点部署 2、查看证书的信息 2.1 创建k8s工作目…

SQL74 纠错2

描述供应商表Vendors有字段供应商名称vend_name、供应商国家vend_country、供应商省份vend_statevend_namevend_countryvend_stateappleUSACAvivoCNAshenzhenhuaweiCNAxian【问题】修改正确下面sql,使之正确返回SELECT vend_name FROM Vendors ORDER BY vend_name W…

【Redis】数据结构篇

一. String 字符串 常见用途:缓存用户信息,将用户信息结构体使用 JSON 序列化为字符串,然后将序列化后的字符串给 Redis 来缓存 Redis 字符串是动态字符串,是可以修改的字符串 —— 实现类似 ArrayList ?&#xff1f…

【自动化测试】自动化测试框架那些事儿

无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。在教学的过程中,同学们一直对“框架”这个词知其然不知其所以然。 最近看了很多自动化相关的资料,加上一些实践,算是对“框架”有了一些理解…

什么是生命周期?Activity生命周期的三种状态

什么是生命周期生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态、暂停状态和停止状态。接下来将针对Activity生命周…

CANopen概念总结、心得体会

NMT网络管理报文: NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文。常见报文说明: 0101---------------网络报文发送Nmt_Start_Node,让电机进入OP模式(此时还不会发送同步信号) setState(d, Operational)------------------开启…

STM32 SystemInit()函数学习总结

拿到程序后如何看系统时钟?User文件夹——system_stm32f4xx程序,先找systemcoreclock(系统时钟)但是这里这么多个系统时钟应该如何选择?点击魔法棒,然后点击C/C可以看到define的是F40_41XXX.USE这一款 ,对应着就找出了…

虹科新品 | 最高80W!用于大基板紫外曝光系统的高功率UVLED光源

光刻曝光是指利用紫外光源将胶片或其他透明物体上的图像信息转移到涂有光敏材料(光刻胶)表面以得到高精度和极细微图案的一种制作工艺,主要用于半导体生产、高精密集成电路、PCB板制造、MEMS等行业。光刻技术是半导体工业和集成电路是最为核心…

SAP FICO 理解业务范围的概念

业务范围 以前转载过几篇关于业务范围的文章: SAP Business Area 业务范围_SAP剑客的博客-CSDN博客_sap 业务范围 SAP FI 系列 002:业务范围派生_stone0823的博客-CSDN博客_sap 业务范围 http://blog.sina.com.cn/s/blog_3f2c03e30102w9yz.html 仍是…

修改redis的配置文件使得windows的图形界面客户端可以连接redis服务器

一、redis自带的客户端(了解,不方便)进入到redis安装目录的bin目录下指定主机和端口# ./redis-cli -h 127.0.0.1 -p 6379127.0.0.1:6379> exit 【退出】-h:redis服务器的ip地址-p:redis实例的端口号如果不指定主机和…

Dropout

目录一、Dropout出现的原因二、什么是Dropout?三、为什么Dropout解决过拟合?3.1 取平均的作用3.2 减少神经元间复杂的共适应关系四、实现Dropout—— pytorchexample 1example 2example 3设置dropout参数技巧一、Dropout出现的原因 在机器学习的模型中 如果模型的…

“终于懂了” 系列:组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入

ARouter系列文章: “终于懂了” 系列:组件化框架 ARouter 完全解析(一)原理全解 “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT—帮助类生成 “终于懂了” 系列:组件化框架…

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前,关闭电脑的防火墙,退出所有杀毒软件,防止刷单软件被误删桌面建立一个文件夹,下载下来的安装包放进去,解压到当前文件夹,使用过程中别打开防火墙、杀毒软件。打开软件后,…

计算机系统基础知识

计算机的基本组成 计算机组成逻辑图 计算机部件作用 一级部件作用 运算器:计算机的执行部件,受控制器控制,执行算术运算或逻辑运算控制器:决定计算机运行过程的自动化。不仅能保证程序指令的正确执行,还能处理异常事…

代谢组+转录组分析为腰果树果实发育成熟过程中代谢网络提供见解

文章标题:Metabolomic and transcriptomic analyses provide insights into metabolic networks during cashew fruit development and ripening 发表期刊:Food Chemistry 影响因子:9.231 作者单位:海南大学 百趣生物提供服务…