- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
4.2二叉树的基本操作
无论是线性结构还是非线性结构数据,都需要对数据元素逐个进行组织存储和处理。二叉树的基本操作,主要包括二叉树的建立和遍历等。
二叉树的建立1.建立二叉树的操作,可以按照层的顺序进行,先由第1层开始,依次到下一层,在每一层中按照从左到右的顺序创建节点。二叉树的建立可以用数组或者链表数据结构来实现。
1.数组实现用数组来表示二叉树时,分为以下两种情况。(1)完全二叉树从二叉树的根节点开始,按从上而下、自左向右的顺序对n个节点进行编号,根节点的编号为0,最后一个节点的编号为n-1。然后依次将二叉树的节点用一组连续的数组元素来表示,节点编号与数组的下标一一对应。如下图中图甲所示的完全二叉树所对应的一维数组表示如图乙所示。
ABCDE甲完全二叉树ABCD数组表示示意图
(2)非完全二叉树对于非完全二叉树,先将它补充为一棵完全二叉树,补上的节点及分支用虚线表示,如下图图甲所示的一棵非完全二叉树补全为图乙所示的完全二叉树。然后将补全后的完全二叉树,从它的根节点开始,按从上而下、自左往右的顺序对n个节点进行编号,根节点的编号为0,最后一个节点的编号为n-1。如图丙所示,依次把完全二叉树中原二叉树的节点用一维数组的各个元素来表示,节点编号与数组的下标一一对应。
ABCABC甲原二叉树乙补全后的二叉数组实现示意图ABC
对于完全二叉树而言,一维数组的表示方式既简单又节省存储空间。但对于一般的二叉树来说,采用一维数组表示时,结构虽然简单,却容易造成存储空间的浪费。如图甲所示,一个深度为k且只有k个节点的树需要如图乙所示2k-1个节点的存储空间才能表示出来。
2.链表实现二叉树也可以采用链表来实现,用任意一组存储单元来存储二叉树的节点,用指向节点的指针来表示节点之间的关系。由于二叉树的节点可能有两个孩子,即左孩子和右孩子,因此二叉树的节点至少需要3个域:一个数据域和两个指针域。两个指针域分别指向节点的左孩子和右孩子,这两个指针分别称为左指针和右指针,这样得到的链表也称为二叉链表。
如下图所示的是二叉树及其对应的二叉链表实现示意图。ABDCEFGA头指针B^C^^D^E^F^^G^
二叉树的list实现二叉树节点可以看成是一个三元组,元素是左、右子树和本节点数据。Python的list可以用于组合这样的三个元素。下面介绍用list构造二叉树的方法。(1)空树用None表示。(2)非空二叉树用包含三个元素的列表[d,l,r]表示,其中:d表示根节点的元素,l和r是两棵子树,采用与整个二叉树同样结构的list表示。
这样就可以把二叉树映射到一种分层的list结构,每棵二叉树都有与之对应的(递归结构的)list。ABCDFGEHI[‘A’,[‘B’,None,None],[‘C’,[‘D’,[‘F’,None,None],[‘G’,None,None]],[‘E’,[‘H’,None,None],[‘I’,None,None]]]]
二叉树的遍历在完成二叉树的建立操作后,就可以对二叉树的各个节点进行访问,即遍历操作。二叉树的遍历,是指按照一定的规则和次序访问二叉树中的所有节点,使得每个节点都被访问一次且仅被访问一次。按照不同的遍历方式对节点进行访问,其处理效率不完全相同。二叉树的遍历方式有很多,主要有前序遍历、中序遍历和后序遍历等。
1.前序遍历前序遍历的规则是:若二叉树为空,则空操作返回;否则,先访问根节点,再访问左子树,最后访问右子树。ABDEHCFIGJK前序遍历顺序为:A-B-D-H-E-C-F-I-G-J-K
2.中序遍历中序遍历的规则是:若二叉树为空,则空操作返回;否则,先访问左子树,再访问根节点,最后访问右子树。ABDEHCFIGJK中序遍历顺序为:D-H-B-E-A-I-F-C-J-G-K
3. 后序遍历后序遍历的规则是:若二叉树为空,则空操作返回;否则,先访问左子树,再访问右子树,最后访问根节点。ABDEHCFIGJK后序遍历顺序为:H-D-E-B-I-F-J-K-G-C-A
如果选取其中一种遍历策略对二叉树进行遍历,对于二叉树的左右子树,也需遵守该遍历原则,即二叉树的任意一个局部都必须遵守该遍历原则。对一棵二叉树进行前序遍历时,根节点总是处于遍历序列之首;中序遍历时根节点位置居中,左子树的所有节点都在其左边,右子树的所有节点都在其右边;后序遍历时根节点位置在最后,其所有节点都在其左边。
二叉树的应用如果将数学表达式中的运算数和运算符视为二叉树的每个节点,那么可以构造出各种表达式树。+-84/5+3*26中序遍历:8-
您可能关注的文档
- 疫情防控返乡人员登记表.docx
- 疫情防控行程登记表.docx
- 用车申请单车辆管理单.docx
- 幼儿拼音表韵母表.docx
- 幼儿启蒙一年级汉语拼音字母笔画笔顺表(可编辑打印).docx
- 幼儿小学英语字母发音拼写练习.docx
- 幼小衔接韵母声调表.docx
- 预防疾病从正确洗手开始.docx
- 员工工作情况测评记录表.docx
- 员工过失处罚决定表.docx
- 2025年中国塑料中空模具市场调查研究报告.docx
- 2025年中国一体化恒压限流充电器市场调查研究报告.docx
- 2025年特岗教师招聘考试-中学特岗教师招聘考试近5年真题荟萃附答案.docx
- 2025至2031年中国水泥电线杆行业投资前景及策略咨询研究报告.docx
- 2025年中国USB调制解调器市场调查研究报告.docx
- 2025年中国印刷机用颜色校样工作台市场调查研究报告.docx
- 2025年中国吸顶空调市场调查研究报告.docx
- 2025年中国吹瓶设备市场调查研究报告.docx
- 2025年电子产品-手机知识考试近5年真题集锦(频考类试题)带答案.docx
- 2025年山西住院医师-山西住院医师精神科考试近5年真题集锦(频考类试题)带答案.docx
文档评论(0)