Python实现二叉树的最小深度的两种方法


Posted in Python onSeptember 30, 2019

找到给定二叉树的最小深度

最小深度是从根节点到最近叶子节点的最短路径上的节点数量

注意:叶子节点没有子树

Example:

Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
return its minimum depth = 2.

1:算法遍历二叉树每一层,一旦发现某层的某个结点无子树,就返回该层的深度,这个深度就是该二叉树的最小深度

def minDepth(self, root):
    """
    :type root: TreeNode
    :rtype: int
    """
    if not root:
      return 0
    curLevelNodeList = [root]
    minLen = 1
    while curLevelNodeList is not []:
      tempNodeList = []
      for node in curLevelNodeList:
        if not node.left and not node.right:
          return minLen
        if node.left is not None:
          tempNodeList.append(node.left)
        if node.right is not None:
          tempNodeList.append(node.right)
      curLevelNodeList = tempNodeList
      minLen += 1
    return minLen

2:用递归解决该题和"二叉树的最大深度"略有不同。主要区别在于对“结点只存在一棵子树”这种情况的处理,在这种情况下最小深度存在的路径肯定包括该棵子树上的结点

def minDepth(self, root):
    """
    :type root: TreeNode
    :rtype: int
    """
    if not root:
      return 0
    if not root.left and root.right is not None:
      return self.minDepth(root.right)+1
    if root.left is not None and not root.right:
      return self.minDepth(root.left)+1
    left = self.minDepth(root.left)+1
    right = self.minDepth(root.right)+1
    return min(left,right)

算法题来自:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/description/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈python多线程和队列管理shell程序
Aug 04 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python合并同类型excel表格的方法
Apr 01 Python
python3+PyQt5泛型委托详解
Apr 24 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
python中的句柄操作的方法示例
Jun 20 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
pytorch中的model=model.to(device)使用说明
May 24 Python
Python函数中apply、map、applymap的区别
Nov 27 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
python打开使用的方法
Sep 30 #Python
python 字典有序并写入json文件过程解析
Sep 30 #Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 #Python
Python3 翻转二叉树的实现
Sep 30 #Python
ubuntu上安装python的实例方法
Sep 30 #Python
python多进程并行代码实例
Sep 30 #Python
Python3实现二叉树的最大深度
Sep 30 #Python
You might like
PHP的explode和implode的使用说明
2011/07/17 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
javascript 三种编解码方式
2010/02/01 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python僵尸进程产生的原因
2017/07/21 Python
python操作oracle的完整教程分享
2018/01/30 Python
Pycharm小白级简单使用教程
2020/01/08 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
AJAX的优缺点都有什么
2015/08/18 面试题
Servlet面试题库
2015/07/18 面试题
精彩的英文自荐信
2014/01/30 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
预备党员表决心书
2014/03/11 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
golang中的并发和并行
2021/05/08 Golang
分析并发编程之LongAdder原理
2021/06/29 Java/Android
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python