万网手机网站,网站怎么做自适应,视频网站直播怎么做,高手优化网站最小深度思路解析:
与求最大深度相比,求最小深度就要简单很多,从上向下访问,只要访问到一个叶节点,证明已经到达了与根节点距离最近的叶节点处,此叶节点的深度即为最小深度.借助队列,如果当前节点为叶节点,则返回该节点的深度为最终结果;如果当前节点不满足上述判断且不为空节…最小深度思路解析:
与求最大深度相比,求最小深度就要简单很多,从上向下访问,只要访问到一个叶节点,证明已经到达了与根节点距离最近的叶节点处,此叶节点的深度即为最小深度.借助队列,如果当前节点为叶节点,则返回该节点的深度为最终结果;如果当前节点不满足上述判断且不为空节点,即存在子节点,则将其子节点依次入队.因此,求最小深度的思路十分清晰.代码中的变量如下:
root变量:表示给定二叉树的根节点
queue变量:表示队列
depth变量:表示当前节点的深度,根节点的深度为1
node变量:表示取出的队列头部元素中的节点
有一点不同之处:每个节点入队时,将其所处深度与该节点以元组的方式一同入队,首先将根节点及其深度入队,以供迭代过程的开始.代码如下:
from collections import deque # 导入deque用于实现队列def minDepth(root): # 定义函数minDepth输入参数为二叉树的根节点rootif not root: # 如果根节点为空直接返回0因为空树的深度为0return 0queue deque([1, root]) # 初始化一个双端队列将根节点和它的深度1作为队列的第一个元素while queue: # 当队列不为空时循环执行depth, node queue.popleft() # 从队列中弹出一个元素包含当前节点的深度和节点本身if node and not node.left and not node.right: # 如果当前节点是叶子节点没有左右子节点return depth # 返回当前深度因为找到了最小深度if node: # 如果当前节点不为空queue.append((depth 1, node.left)) # 将左子节点和它的深度当前深度1加入队列queue.append((depth 1, node.right)) # 将右子节点和它的深度当前深度1加入队列