Python实现二叉树的遍历

二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。
  • 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
  • 二叉树的第i层至多有2^{i-1}个结点
  • 深度为k的二叉树至多有2^k-1个结点;
  • 对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0=N2+1

首先构建二叉树:

1 class Node:  
2     def __init__(self,value=None,left=None,right=None):  
3         self.value=value  
4         self.left=left    #左子树
5         self.right=right  #右子树

下面给出二叉树的前序遍历/中序遍历/后序遍历

 1 def preTraverse(root):  
 2     '''
 3     前序遍历
 4     '''
 5     if root==None:  
 6         return  
 7     print(root.value)  
 8     preTraverse(root.left)  
 9     preTraverse(root.right)  
10 
11 def midTraverse(root): 
12     '''
13     中序遍历
14     '''
15     if root==None:  
16         return  
17     midTraverse(root.left)  
18     print(root.value)  
19     midTraverse(root.right)  
20   
21 def afterTraverse(root):  
22     '''
23     后序遍历
24     '''
25     if root==None:  
26         return  
27     afterTraverse(root.left)  
28     afterTraverse(root.right)  
29     print(root.value)  

下面给出一个例子,验证一下程序

 

 

 

 1 if __name__=='__main__':
 2     root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F'))))
 3     print('前序遍历:')
 4     preTraverse(root)
 5     print('\n')
 6     print('中序遍历:')
 7     midTraverse(root)
 8     print('\n')
 9     print('后序遍历:')
10     afterTraverse(root)
11     print('\n')

输出的结果为

前序遍历:
D
B
A
C
E
G
F中序遍历:
A
B
C
D
E
F
G后序遍历:
A
C
B
F
G
E
D

那么,如果我们已知二叉树的前序遍历和中序遍历,求这棵二叉树的后序遍历

 1 preList = list('12473568')
 2 midList = list('47215386')
 3 afterList = []
 4 
 5 def findTree(preList, midList, afterList):
 6     if len(preList) == 0:
 7         return
 8     if len(preList) == 1:
 9         afterList.append(preList[0])
10         return
11     root = preList[0]
12     n = midList.index(root)
13     findTree(preList[1:n + 1], midList[:n], afterList)
14     findTree(preList[n + 1:], midList[n + 1:], afterList)
15     afterList.append(root)

结果为:

['7', '4', '2', '5', '8', '6', '3', '1']
1 如果以上面的前序:DBACEGF和中序:ABCDEFG,得到的结果为:
2 ['A', 'C', 'B', 'F', 'G', 'E', 'D']

转载于:https://www.cnblogs.com/geogre123/p/11127095.html

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

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

相关文章

操作系统学习笔记-02-1.2-什么是操作系统

1.2什么是操作系统 没有一个完整,精确,公认的定义从功能和特点上来介绍操作系统 用户角度上,操作系统是一个控制软件管理应用程序为应用程序提供服务杀死应用程序 资源管理管理外设,分配资源 操作系统架构层次 硬件之上应用程序之…

大脑活动与认知: 热力学与信息论的联系

来源:集智俱乐部作者:Guillem Collell、Jordi Fauquet译者:张澳审校:刘培源编辑:邓一雪导语信息和能量之间的关系已经在物理学、化学和生物学中得到了广泛的研究。然而,这种联系并没有在神经科学领域形式化。2015年&am…

离散数学学习笔记-01-随机试验与随机事件

文章目录1.1.1随机试验与随机事件引言随机事件1.1.2.样本空间与事件的集合表示基本概念1.1.3事件之间的关系1.包含2.并(和)引入概率论的三个要素:1.1.1随机试验与随机事件 引言 确定性(必然):一定发生&am…

18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位aa 55 02 00 30 8C 控制LED熄灭 30 8C为CRC高位和低位 aa 55 03 占空比(四字节 高位在前,低位在后) CRC校验高位,CRC校验低位 预留一个问题 我用客…

Ubuntu下的git使用指南

1.创建账号,绑定邮箱 在Git或者Gitee中创建一个Git账号或者Gitee账号,绑定邮箱,Ubuntu下的git命令对Git或者Gitee都有效。 2.安装git Ubuntu下下载git命令: sudo apt-get install git在下载完之后,可以通过git --v…

人类、动物和人工智能意识的新理论

来源:ScienceAI编译:萝卜皮德国波鸿鲁尔大学(RUB)的两名研究人员提出了一种新的意识理论。他们一直在探索意识的本质,大脑如何产生意识以及在何处产生意识,以及动物、人工智能是否也有意识等问题。新概念将…

ffmpeg——简单播放器代码

1.媒体文件播放总体过程 媒体文件——>解复用——>解码——>调用播放接口——>播放 2.解复用 2.1 什么是解复用? 解复用:将媒体文件分解为视频流和音频流 avformat_open_input() /*打开对应的文件,查找对应的解复用器&…

Nature公布2022年值得关注的七大科学事件, 中国一项入选!

来源:科技日报 记者 刘霞 文中图片来自《自然》杂志官网,版权属于原作者,仅用于学术分享尽管今年新冠疫情仍然肆虐,给人类带来不少悲剧和灾难,但“每朵乌云都镶有金边”!新冠疫苗成为抗击疫情的有力武器、…

计算机网络学习笔记-01-概念,组成,功能,分类

计算机网络-2019 王道考研 计算机网络-1-概念,组成,功能,分类 文章目录1.概念,组成,功能,分类1.1概念1.2功能1.3组成部分1.3分类1.4思维导图总结1.概念,组成,功能,分类 …

深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好

来源:机器学习研究组订阅调参的苦与泪,还有那些「迷信的做法」。每个机器学习领域的研究者都会面临调参过程的考验,当往往说来容易做来难。调参的背后往往是通宵达旦的论文研究与 GitHub 查阅,并需要做大量的实验,不仅…

计算机网络学习笔记-02-标准化工作以及相关组织

计算机网络-2019 王道考研 计算机网络-02-标准化工作以及相关组织 文章目录2.标准化工作以及相关组织2.1标准化工作2.2 相关组织2.3思维导图2.标准化工作以及相关组织 2.1标准化工作 标准的分类 法定标准:OSI事实标准:TCP/IP 举例子:手机卡…

Go-cron定时任务

1、cron(计划任务) 按照约定的时间,定时的执行特定的任务(job)。 cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示。 秒 分 时 日 月 星期 2、Linux的cron与Go的cron区别 linux 中的 cr…

2021年突破人类想象力的6大科学纪录

来源:《科技日报》 人类每年都在创造历史,科学家们也在不断创造新纪录,今年也不例外!美国《科学新闻》杂志网站在12月20日的报道中,为我们梳理了2021年令人惊奇的6大科学纪录,包括发现迄今最古老的黑洞以及…

操作系统学习笔记-01-操作系统的概念(定义),功能和目标

操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念(定义),功能和目标 文章目录1-操作系统的概念(定义),功能和目标1.1常见的操作系统1.2概念(定义)1.3-操作系统的功能和目…

从复现人类智能到挑战AI大工程,智能计算正经历什么考验?

来源:AI科技评论作者:杏花编辑:青暮世界顶级机器学习专家Michael I.Jordan曾提出一个观点,他认为人工智能正逐步由原理性研究,走向人工智能大工程。Michael I.Jordan认为,随着机器学习的蓬勃发展&#xff0…

操作系统学习笔记-02-操作系统的特征

操作系统学习笔记-2019 王道考研 操作系统-2-操作系统的特征 文章目录02-操作系统四个的特征2.1-知识概览2.2并发2.3共享2.3并发和共享的关系2.4虚拟2.5小结:虚拟技术2.6-异步2.7知识回顾02-操作系统四个的特征 2.1-知识概览 2.2并发 并发:指两个或多个事件在同-一…

从宇宙、互联网和脑的关系看元宇宙的终极形态

作者 刘锋 曾经在2012年写过一篇论文《THE EVOLUTION ROAD MAP FROM THE ORIGIN OF LIFE TO THE INTELLIGENT UNIVERSE》,探讨了关于宇宙、互联网和脑之间的内在联系,阐述面本世纪以来,互联网为核心的科技生态出现越来越多的类脑特征&#xf…

操作系统学习笔记-03-操作系统的发展和分类

操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念(定义),功能和目标 文章目录3-操作系统的发展和分类3.1知识总览3.2 手工操作,纸带机,串行式3.3批处理阶段-单道批处理系统-多道批处理系统3.4分时操作系统3…

马斯克炮轰元宇宙与Web3.0:“我不觉得有人会成天把屏幕绑在脑袋上”

来源:雷峰网元宇宙和 Web3.0据称将是彻底改变数字世界的两种趋势。但现实世界中的首富、硅谷钢铁侠埃隆马斯克对两者似乎都并不怎么看好。在最近的一次采访中,马斯克表示,他在市场上并没有看到任何值得注意的元宇宙VR应用,并表示他…

操作系统学习笔记-04-操作系统的运行机制和体系结构

操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录4-操作系统的运行机制和体系结构4.1知识总览4.2运行机制4.2.1预备知识:什么是指令?4.2.2两种指令,两种处理器状态,两种程序4.2.3运行机制小结4…