Python二叉树构建(完全二叉树)

2023-11-11

        Python完全二叉树的构建,包含广度优先插入节点、广度遍历、先序、中序、后序遍历等函数。

class Node(object):
	"""节点"""
	def __init__(self, item):
		self.elem = item
		self.lchild = None
		self.rchild = None

class Tree(object):
	"""二叉树"""
	def __init__(self):
		self.root = None
		self.preorder_list = []
		self.inorder_list = []
		self.postorder_list = []
		
	def add(self, item):
		"""
		插入树节点
		广度优先
		"""
		node = Node(item)
		if self.root == None:
			self.root = node
			return
		queue = [self.root]
		while queue:
			cur_node = queue.pop(0)
			if cur_node.lchild == None:
				cur_node.lchild = node
				return
			else:
				queue.append(cur_node.lchild)
			if cur_node.rchild == None:
				cur_node.rchild = node
				return
			else:
				queue.append(cur_node.rchild)
	
	def breadth_travel(self):
		"""
		广度遍历
		"""
		if self.root == None:
			return []
		queue = [self.root]
		ls = [self.root.elem]
		while queue:
			cur_node = queue.pop(0)
			if cur_node.lchild == None:
				return ls
			else:
				ls.append(cur_node.lchild.elem)
				queue.append(cur_node.lchild)
			if cur_node.rchild == None:
				return ls
			else:
				ls.append(cur_node.rchild.elem)
				queue.append(cur_node.rchild)

	def is_empty(self):
		"""
		判断树是否为空
		"""
		if self.root == None:
			print(True)
		else:
			print(False)

	def list_add(self, add_list):
		"""
		输入列表快速添加树节点
		"""
		for i in add_list:
			self.add(i)

	def pre(self, node):
		"""
		先序遍历
		根 左 右
		"""
		if node == None:
			return
		self.preorder_list.append(node.elem)
		self.pre(node.lchild)
		self.pre(node.rchild)
	def preorder(self):
		self.pre(self.root)
		return self.preorder_list

	def mid(self, node):
		"""
		中序遍历
		左 根 右
		"""
		if node == None:
			return 
		self.mid(node.lchild)
		self.inorder_list.append(node.elem)
		self.mid(node.rchild)
	def inorder(self):
		self.mid(self.root)
		return self.inorder_list

	def pos(self, node):
		"""
		后序遍历
		左 右 根
		"""
		if node == None:
			return
		self.pos(node.lchild)
		self.pos(node.rchild)
		self.postorder_list.append(node.elem)
	def postorder(self):
		self.pos(self.root)
		return self.postorder_list

if __name__ == "__main__":
	tree = Tree()
	tree.list_add([0,1,2,3,4,5,6,7,8,9])
	tree.add(10)
	ls=tree.breadth_travel()
	print(ls)
	ls = tree.preorder()
	print(ls)
	ls=tree.inorder()
	print(ls)
	ls=tree.postorder()
	print(ls)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python二叉树构建(完全二叉树) 的相关文章

  • Scrapy 在抓取一长串 url 时陷入困境

    我正在抓取一个大的 url 列表 1000 左右 并且在设定的时间后 爬虫程序会以 0 页 分钟的速度爬行 爬行时问题总是出现在同一个位置 url 列表是从 MySQL 数据库检索的 我对 python 和 scrapy 相当陌生 所以我不
  • Python RAD(桌面部署)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果这个问题回答了这么多次 请原谅我
  • 创建一个行为类似于任何变量但具有更改/读取回调的类

    我想创建一个类 其行为类似于 python 变量 但在更改 读取 变量 时调用一些回调函数 换句话说 我希望能够按如下方式使用该类 x myClass change callback read callback 将 x 定义为 myclas
  • python 类的属性不在 __init__ 中

    我想知道为什么下面的代码有效 usr bin env python3 import sys class Car def init self pass if name main c Car c speed 3 c time 5 print c
  • Django REST Framework:无法使用视图名称解析超链接关系的 URL

    我已经广泛研究了这个相当常见的问题 但没有一个修复对我有用 我正在 REST 框架中构建 Django 项目 并希望使用超链接关系 用户可以拥有许多独立的汽车和路线 路线是位置的集合 这些是我的序列化器 class CarSerialize
  • 预处理 csv 文件以与 tflearn 一起使用

    我的问题是关于在将 csv 文件输入神经网络之前对其进行预处理 我想使用 python 3 中的 tflearn 为著名的 iris 数据集构建一个深度神经网络 数据集 http archive ics uci edu ml machine
  • 如何使用lxml和python更新xml文件?

  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 使用 python 写入 aws lambda 中的 /tmp 目录

    Goal 我正在尝试将 zip 文件写入 python aws lambda 中的 tmp 文件夹 因此我可以在压缩之前提取操作 并将其放入 s3 存储桶中 Problem 操作系统 Errno30 只读文件系统 这段代码在我的计算机上进行
  • Mac 上的 Errno 13 权限被拒绝

    我只是测试如何从一个 py 文件调用外部 py 文件 我有 2 个 py 文件 都在同一目录中 这是主要代码 runext py 假设调用 ext py import subprocess subprocess call Users tra
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO
  • 在 Django 中翻译文件时的 Git 命令

    我在 Django 中有一个现有的应用程序 我想在页面上添加翻译 在页面上我有 trans Projects 在 po 文件中我添加了 templates staff site html 200 msgid Projects msgid P
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • Django:在单独的线程中使用相同的测试数据库

    我正在使用具有以下数据库设置的测试数据库运行 pytests DATABASES default ENGINE django db backends postgresql psycopg2 NAME postgres USER someth
  • 在 Mac (Catalina) 上安装 PyGame 时出错 [重复]

    这个问题在这里已经有答案了 我一直在尝试将 PyGame 安装到 Catalina 上的 Mac 上 但不知道如何安装 我收到的错误消息是 SystemExit error command gcc failed with exit stat
  • 磁盘寻道时间测量方法

    我编写了一个脚本来测量 HDD 上的寻道时间 并且其完成方式的微小变化会导致显着不同的时间 第一个周期在磁盘开头的区域内进行跳转 第二个周期选择磁盘上执行查找的随机区域 相同大小 这种方法显然不同 但我不明白为什么它会改变结果 请注意 对于
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • 无法在 Python 2.4 中解码 unicode 字符串

    这是Python 2 4 中的 这是我的情况 我从数据库中提取一个字符串 它包含一个变音的 o xf6 此时 如果我运行 type value 它会返回 str 然后我尝试运行 decode utf 8 但收到错误 utf8 编解码器无法解

随机推荐