数据结构+python(五):树

数据结构基础+python实现(五):树
树是一种二维的数据结构,可以用顺序表和链表实现,但是相比较而言,链表的结构和树比较接近,所以使用链表更为方便。
对于树,有些基本的分类:
无序树:树种任意节点的子节点之间没有顺序关系。
有序树
1、二叉树,又包括完全二叉树、满二叉树、平衡二叉树、排序二叉树
2、哈夫曼树
3、B树

树的实现

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 # 根节点,类似于链表的头结点
	
	def add(self, item):
		node = Node(item)
		if self.root is None: # 如果为空树,直接添加;如果为空树,cur_node.lchild会报错
			self.root = node
			return
		queue = [self.root]
		while queue:
			cur_node = queue.pop(0)
			if cur_node.lchild is None:
				cur_node.lchild = node
				return 
			else:
				queue.append(cur_node.lchild)
			if cur_node,rchild is None:
				cur_node.rchild = node
				return
			else:
				queue.append(cur_node.rchild)

# 在树种添加一个节点,类似广度添加,使用一个队列进行待判断节点的存储
		

深度遍历(先序、中序、后序)

1、
在这里插入图片描述

def preorder(self, node):
	"""先序遍历"""
	if node is None:
		return
	print(node.elem)
	self.preorder(node.lchild)
	self.preorder(node.rchild)

# 如果遍历到叶子节点,先把叶子节点打印出来,然后node.lchild为None,终止递归

2、
在这里插入图片描述

def inorder(self, node):
	"""中序遍历"""
	if node is None:
		return
	self.inorder(node.lchild)
	print(node.elem)
	self.inorder(node.rchild)

3、
在这里插入图片描述

def postorder(self, node):
	"""后序遍历"""
	if node is None:
		return
	self.postorder(node.lchild)
	self.postorder(node.rchild)
	print(node.elem)

你可能感兴趣的:(学习笔记)