首页 > 编程语言 >在python中实现二叉树

在python中实现二叉树

时间:2024-04-12 21:00:43浏览次数:26  
标签:traverse 遍历 python self tree 实现 二叉树 root 节点

二叉树设计

定义节点类

class Node:
# 修改初始化方法
def init(self,value):
self.value = value # 节点值
self.left = None # 左子树
self.right = None # 右子树

定二叉树类

class BinaryTree:
# 修改初始化方法
def init(self,root=None):
self.root = root # 根节点
# 定义添加节点方法 广度优先
def add(self,value):
if self.root == None:
self.root = Node(value)
return # 根节点已存在,不再添加
# 根节点不为空,开始遍历
queue= []
# 将根节点加入队列
queue.append(self.root)
# 循环判断,哪个节点为空,将新节点加入该节点
while True:
# 从队列中取出根节点
node = queue.pop(0)
# 判断该节点左子树是否为空
if node.left == None:
node.left = Node(value)
return
else:
queue.append(node.left)
# 判断该节点右子树是否为空
if node.right == None:
node.right = Node(value)
return
else:
queue.append(node.right)
# 遍历二叉树 广度优先
def traverse(self,root):
# 判断根节点是否为空,若为空,则返回
if self.root == None:
return
# 创建队列
queue = []
# 将根节点添加到队列中
queue.append(self.root)
# 循环遍历,根据队列长度来循环,需要大于0
while len(queue) > 0:
# 从队列中取出节点
node = queue.pop(0)
# 打印节点内容
print(node.value,end=' ')
# 判断左子树是否为空,若不为空,则添加到队列中
if node.left != None:
queue.append(node.left)
# 判断右子树是否为空,若不为空,则添加队列中
if node.right != None:
queue.append(node.right)
# 遍历二叉树,深度优先,先序遍历 (根左右)
def pre_traverse(self,root):
# 判断根节点是否为空,不为空则执行
if root is not None:
# 打印根节点
print(root.value,end=' ')
# 递归调用左子树
self.pre_traverse(root.left)
# 递归调用右子树
self.pre_traverse(root.right)
# 遍历二叉树,深度优先,中序遍历 (左根右)
def mid_traverse(self,root):
# 判断根节点是否为空,不为空则执行
if root is not None:
# 递归调用左子树
self.mid_traverse(root.left)
# 打印根节点
print(root.value,end=' ')
# 递归调用右子树
self.mid_traverse(root.right)
# 遍历二叉树,深度优先,后序遍历 (左右根)
def post_traverse(self,root):
# 判断根节点是否为空,不为空则执行
if root is not None:
# 递归调用左子树
self.post_traverse(root.left)
# 递归调用右子树
self.post_traverse(root.right)
# 打印根节点
print(root.value,end=' ')

测试

def Dm01():
# 创建二叉树
tree = BinaryTree()
# 添加节点
tree.add(0)
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.add(7)
tree.add(8)
tree.add(9)
# 先序遍历
print("\n先序遍历:")
tree.pre_traverse(tree.root)
# 中序遍历
print("\n中序遍历:")
tree.mid_traverse(tree.root)
# 后序遍历
print("\n后序遍历:")
tree.post_traverse(tree.root)

运行测试

if name == 'main':
Dm01()1.

标签:traverse,遍历,python,self,tree,实现,二叉树,root,节点
From: https://www.cnblogs.com/yzwxd/p/18132080

相关文章

  • C++算法题解 - 递归实现排列型枚举 - 递归法 (图文) (递归搜索树)
    题目:递归实现排列型枚举把1∼n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据......
  • 2-72. 创建 NPC 基本信息并实现根据场景切换显示
    添加NPC添加动画创建NPCMovement修改DataCollection创建NPCManager给NPC添加阴影修改NPCMovement关闭NPC的重力测试修改CurrentScene,然后运行游戏,会发现NPC不见了,这就对了项目相关代码代码仓库:https://gitee.com/nbda1121440/farm-tu......
  • 二叉树简介
    本篇目录树的相关概念树的种类二叉树的概念和性质二叉树的广度优先遍历二叉树的深度优先遍历树的相关概念数据结构大致上分为线性结构和非线性结构,线性结构指的是元素之间存在着“一对一”的线性关系的数据结构;非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱......
  • Python程序员Visual Studio Code指南5调试
    5调试当运行程序时终端输出错误时,可以参考编辑器中的"问题"面板来解决遇到的问题。不过,并非所有错误都会导致错误。可能出现的情况是,程序执行成功,但输出结果与预期不同。出现这种情况时,下一步就是找出程序中的错误。这个过程被称为调试。您可以尝试通过注释代码行(从而禁止代码......
  • python--用户的输入和while 循环
    '''函数函input()的工作原理的函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。'''#message=input("pleasetellmeyourname:")#print("hello"+message)'''pleasetellmeyourname:cla......
  • Java如何自行实现正向地理编码算法(不依赖api,不联网)
    政务场景中经常会遇到地址落图,或者三维挂接的场景。如何将文本地址转化为gps坐标是实现要解决的核心问题。addresstool为正向地理编码提供了非常简单、高效的算法。如何实现正向地理编码,只需要3步就行:第一步:带有坐标的标准地址加载到addresstool中。第二部:以业务地址作为参数,使......
  • day2-Python训练营
    1.ClassOne1.如何正确关闭一个Vmware中的虚拟机2.为Ubuntu安装一些软件step1:openterminal或者快捷键ctrl+shift+T打开终端,然后ping一下,看网络是否连通。step2:sudoaptupdate,判断安装源(默认是美国的源,类似于软件商店)是否连通;step3:安装两个软件,ssh和vim,sudoaptin......
  • 简单处理——FPGA实现图像中心差分变换
    简单处理——FPGA实现图像中心差分变换一、图像中心差分变换算法简介​ 差分图像就是目标场景在连续时间内图像相减所构成的图像,对图像进行中心差分变换的主要目的是计算图像中心每个像素点的梯度,而每个像素点的梯度在图像处理中就可以被用于描述图像中灰度变化的快慢和方向。......
  • python - redis rdb备份文件导入本地
    1.安装 rdbtoolspipinstallrdbtools 2.安装 python-lzfpipinstallpython-lzf 3. rdb文件导出为json文件rdb--cjson路径名称/备份文件名称.rdb-fxx.json 4. 解析json文件withopen('文件路径/xx.json','r')asjson_file:res=json.loa......
  • 实现学生选课系统
    一、原型工具优缺点对比墨刀、Axure和Mockplus都是常用的原型设计工具,它们在不同的领域有着各自的优势和劣势。1.墨刀(Moqups)适用领域:墨刀是一个简单易用的在线原型设计工具,适合快速制作低保真原型,特别适合初学者或需要快速验证概念的项目团队使用。优点:界面简洁,操作容易上手......