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

        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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值