当前位置: 首页 > article >正文

力扣刷题-二叉树-二叉树的高度与深度

二叉树最大深度

给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
image.png
输入:root = [3,9,20,null,null,15,7]
输出:3

递归法

本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。
二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
根节点的高度就是二叉树的最大深度
,所以本题中我们通过
后序
求的根节点高度来求的二叉树最大深度。
这一点其实是很多同学没有想清楚的,很多题解同样没有讲清楚。
image.png
体现后序遍历的过程!!!使用前序的话要复杂的多
递归第一点:参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。
递归第二点:如果为空节点的话,就返回0,表示高度为0。
递归第三点:
**先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 **(加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。(也就是高度)

class solution:
    def maxdepth(self, root: treenode) -> int:
        return self.getdepth(root)
    def getdepth(self, node):
        if not node:
            return 0
        leftdepth = self.getdepth(node.left) # 左
        rightdepth = self.getdepth(node.right) # 右
        depth = max(leftdepth, rightdepth) + 1 # 中
        return depth

精简版:

class solution:
    def maxdepth(self, root: treenode) -> int:
        if not root:
            return 0
        return 1 + max(self.maxdepth(root.left), self.maxdepth(root.right))

层次遍历

from collections import deque

class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        result = []
        queue = deque([root])
        while queue:
            level_result = []
            for _ in range(len(queue)):
                cur = queue.popleft()
                level_result.append(cur.val)
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            result.append(level_result)
        return len(result) # 里面多少嵌套列表 即为最大深度

参考:
https://www.programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html


http://www.kler.cn/a/135909.html

相关文章:

  • 网络安全防范
  • 【Vue.js 3.0】provide 、inject 函数详解
  • 有哪些免费的 ERP 软件可供选择?哪些 ERP 软件使用体验较好?
  • 内网IP段介绍与汇总
  • 【Leecode】Leecode刷题之路第87天之扰乱字符串
  • 批处理理解
  • 搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录
  • 【数据结构(三)】单向环形链表和约瑟夫问题(3)
  • trzsz支持文件拖动到终端进行上传,类似lrzsz
  • 后端返回 date 时间日期格式为 UTC 格式字符串,形如 2022-08-11T10:50:31.050+00:00前端如何修改为yyyy-mm-dd
  • 公司电脑文件透明加密、防泄密管理软件系统
  • ASP.NET限流器的简单实现
  • 贝锐蒲公英路由器X4C如何远程访问NAS?
  • 面试官:你能说说常见的前端加密方法吗?
  • 基于单片机16路抢答器仿真系统
  • Ubuntu 22.04安装Rust编译环境并且测试
  • 【运维篇】Redis常见运维命令详解
  • 数据处理生产环境_利用MurmurHash3算法在Spark和Scala中生成随机颜色
  • 今天遇到Windows 10里安装的Ubuntu(WSL)的缺点
  • 搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得
  • 【Linux 源码阅读记录】设备树解析 of 相关代码
  • idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable
  • Jenkins自动化部署(虚拟机部署)
  • openssl + 3DES开发实例(linux)
  • Android Studio常见问题
  • redis 非关系型数据库