二叉搜索树(BST)的4种遍历python实现

前序遍历

方法:递归
1、遍历根节点
2、前序遍历左子树
3、前序遍历右子数

def preorder(node1):
	list1 = []
	def recurse(node2):
		if node2:
			list1.append(node2.data)
			recurse(node2.left)
			recurse(node2.right)
	recurse(node1)
	return list1
			

性能更优的方法,使用生成器函数

def preorder(node1):
	stack1 = stack()  # 假设我们已经实现了栈,这里创建一个新的栈对象
	if node1:
		stack1.push(node1)
	else:
		return None
	
	while stack1:
		item = stack1.pop()
		if item:
			yield item.data
			stack1.push(item.right)  # 右子节点压入栈
			stack2.push(item.left)	# 左子节点压入栈

中序遍历

方法:递归
1、中序遍历左子树
2、遍历根节点
3、中序遍历右子数

def inorder(node1):
	list1 = []
	def recurse(node2):
		if node2:
			recurse(node2.left)
			list1.append(node2.data)
			recurse(node2.right)
	recurse(node1)
	return list1		

后序遍历

方法:递归
1、后序遍历左子树
2、后序遍历右子数
3、遍历根节点

def inorder(node1):
	list1 = []
	def recurse(node2):
		if node2:
			recurse(node2.left)
			recurse(node2.right)
			list1.append(node2.data)
	recurse(node1)
	return list1		

层序遍历

方法:使用队列

def preorder(node1):
	deque1 = deque()  # 假设我们已经实现了队列,这里创建一个新的队列对象
	list1 = []
	if node1:
		deque1.add(node1)
	else:
		return None

	def recurse():
		while deque1:
			head = deque.pop()
			if head:
				list1.append(head.data)
				deque1.add(head.left)
				deque1.add(head.right)
	recurse()
	return list1

你可能感兴趣的:(数据结构(python描述))