二叉树广度和深度遍历的全部算法

本文详细介绍了二叉树的遍历算法,包括广度优先遍历(层次遍历)和深度优先遍历(先序、中序、后序)。对于深度优先遍历,提供了递归和非递归两种实现方式。同时,通过实例代码解析了如何运用这些算法解决实际问题,如求解二叉树的最大深度。这些模板对于理解和解决二叉树遍历问题非常有帮助。
摘要由CSDN通过智能技术生成

二叉树广度和深度遍历的全部算法

对于二叉树的遍历,有广度遍历和深度遍历两大类,对于深度遍历又分为先序、中序和后序,这三种先中后序又可以用递归和非递归两种算法来写,下面就分别对这两大类算法做个总结,以后遇到此种问题可以用下面模板来写。

二叉树广度优先遍历

广度优先遍历又叫层次遍历,即对二叉树从上到下,从左到右,一层一层的来遍历。
算法大致流程如下:

  • 建立一个空队列用来存放要遍历的节点,初始时先把函数的参数(一般为根节点)加入队列中
  • 当队列不为空时,进入循环
    1. 取出队列头部节点,并对所取节点进行相关处理操作
    2. 判断如果节点左子节点不为空,则将左子节点加入队列
    3. 判断如果节点右子节点不为空,则将右子节点加入队列
  • 退出循环,若需要返回参数则返回参数
    注意:若需要利用层数,则在进入循环时先求队列长度(每层的节点数),然后将上面循环内的操作放入一个for 循环中执行,for循环用每层节点数来控制
    举个🌰104.二叉树的最大深度
    在此题中,求二叉树的深度,即为求二叉树的层数,我们可以用广度遍历算法来求,每到一层,就将深度加1,流程在上面我已经说明,接下来看代码,以后遇到此种类型题,都可以将下面代码作为模板。
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        """广度优先遍历"""
        if root is None:
        	return 0
        depth = 0
        queue = collections.deque()  # 创建空队列存放要遍历的节点
        queue.append(root)  # 初始将函数的参数(一般为根节点)加入队列
        # 当队列不为空时进入循环
        while queue:
        	# 求每层的节点数
        	size = len(queue)
        	# 每到一层,深度加1
        	depth += 1
        	# 用每层的节点数控制一个for循环
        	for i in range(size):
        		# 取出队列头部节点
        		node = queue.pop()  
        		# 判断节点左子节点
        		if node.left:
        			queue.append(node.left
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值