二叉树的前中后序及层次遍历(python)实现(包含递归非递归)

1、递归实现二叉树的前中后序遍历

>二叉树的前序遍历
# 此方法会将遍历的结果保存在result列表中
def preorderTraversal(node:TreeNode,result:list):
	if node is None:
		return
	result.append(node.val)
	if node.left is not None:
		preorderTraversal(node.left,result)
	if node.right is not None:
		preorderTraversal(node.right,result)
>二叉树的中序遍历
# 此方法将结果保存到result数组中
def inorderTraversal(node:TreeNode,result:list):
	if node is None:
		return
	if node.left is not None:
		inorderTraversal(node.left,result)
	result.append(node.val)
	if node.right is not None:
		inorderTraversal(node.right,result)
>二叉树的后序遍历
# 将结果保存在result列表中
def postorderTraversal(node:TreeNode,result:list) -> list:
	if node is None:
		return
	if node.left is not None:
		postorderTraversal(node.left,result)
	if node.right is not None:
		postorderTraversal(node.right,result)
	result.append(node.val)

2、非递归实现二叉树的前中后序遍历

>二叉树前序遍历的实现
# 此方法同样将结果保存在result列表中
def preorderTraversal(node:TreeNode):
	if root is None:
		return []
	stack = [root]
	result = []
	while stack !=[]:
		temp = stack.pop()
		result.append(temp.val)
		#注意:需要先将右节点入栈
		if temp.right is not None:
			stack.append(temp.right)
		if temp.left is not None:
			stack.append(temp.left)
	return result
>二叉树的中序遍历实现
# 结果将保存在result列表中,并且node为二叉树的根节点
def inorderTraversal(node:TreeNode) -> list:
	temp = node
	stack = []
	result = []
	while temp is not None or stack!=[]:
		if temp is not None:
			stack.append(temp)
			temp = temp.left
		else:
			temp = stack.pop()
			result.append(temp.val)
			temp = temp.right
	return result
>二叉树的后序遍历
# 
def postorderTraversal(root:TreeNode) -> list:
	if root is None:
    	return []
    stack = []
    result = []
    prev = None
    while root is not None or stack != []:
    	while(root is not None):
    		stack.append(root)
    		root = root.left
    	root = stack.pop()
    	if (root.right is None) or (root.right == prev):
    		result.append(root.val)
    		prev = root
    		root = None
    	else:
    		stack.append(root)
    		root = root.right
    return result

层次遍历(以leetcode102题层次遍历为例)

def levelOrder(root: TreeNode) -> list:
	if root is None:
		return []
	from queue import Queue
	save_queue = Queue()
	result = []
	save_queue.put_nowait(root)
	while not save_queue.empty():
		temp_nodes = []
		temp_val = []
		while not save_queue.empty():
			temp_node = save_queue.get_nowait()
			temp_nodes.append(temp_node)
			temp_val.append(temp_node.val)
		result.append(temp_val)
		for temp_node in temp_nodes:
			if temp_node.left is not None:
				save_queue.put_nowait(temp_node.left)
			if temp_node.right is not None:
				save_queue.put_nowait(temp_node.right)
	return result
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值