Python 二叉树的层序建立与三种遍历实现详解
Python / 管理员 发布于 7年前 174
前言
二叉树(Binary Tree)时数据结构中一个非常重要的结构,其具有。。。。(此处省略好多字)。。。。等的优良特点。
之前在刷LeetCode的时候把有关树的题目全部跳过了,(ORZ:我这种连数据结构都不会的人刷j8Leetcode啊!!!)
所以 !!!敲黑板了!!!今天我就在B站看了数据结构中关于树的内容后,又用我浅薄的Python大法来实现一些树的建立和遍历。
关于树的建立我觉得层序建立对于使用者来说最为直观,输入很好写。(好吧,我是看LeetCode中的树输入都是采用层序输入觉得非常好)
树节点定义
代码来
class BSTreeNode(object): def __init__(self, data): self.val = data self.leftChild = None self.rightChild = None
这一段代码太好理解了好吧,就不BB了。
二叉树层序建立
不多说,先上代码
# 建立二叉树是以层序遍历方式输入,节点不存在时以 'None' 表示def creatTree(nodeList): if nodeList[0] == None: return None head = BSTreeNode(nodeList[0]) Nodes = [head] j = 1 for node in Nodes: if node != None: node.leftChild = (BSTreeNode(nodeList[j]) if nodeList[j] != None else None) Nodes.append(node.leftChild) j += 1 if j == len(nodeList): return head node.rightChild = (BSTreeNode(nodeList[j])if nodeList[j] != None else None) j += 1 Nodes.append(node.rightChild) if j == len(nodeList): return head
creatTree即为层序建立二叉树的函数,传入的参数为一个层序遍历的数组,就是将树节点从左往右,从上往下一次放入数组中,如果某个节点不存在则用None来表示。
比如:
图所示的二叉树则需输入a = [1,2,3,4,5,None,6,None,None,7,8],接下来将会以这个二叉树为例讲解代码。
好了代码注释完毕,我们再通过结合实例来解释一下:
PS:如果node为空节点的话,就会直接跳过空节点。
二叉树遍历(神用的递归)
1. 前序遍历
#head为二叉树的根节点def PreorderTraverse(head): if head: print(head.val) PreorderTraverse(head.leftChild) PreorderTraverse(head.rightChild)
2. 中序遍历
#head为二叉树的根节点def InorderTrverse(head): if head: InorderTrverse(head.leftChild) print(head.val) InorderTrverse(head.rightChild)
3. 后续遍历
#head为二叉树的根节点def PostorderTraverse(head): if head: PostorderTraverse(head.leftChild) PostorderTraverse(head.rightChild) print(head.val)
对中序遍历,费了我九牛二虎之力画了一个程序执行的图,红色箭头代表程序执行的过程,依然以a = [1,2,3,4,5,None,6,None,None,7,8]为例
这个图看上去不是很清楚,右键保存到本地看会清楚很多的,我把每一步递归的树都画出来了,这样更加方便理解。
所以程序打印出来的顺序为:4 2 7 5 8 1 3 6
最后,致敬大佬,祝各位学有所成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号