码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 代码随想录算法训练营第16天|104. 二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数


    JAVA代码编写

    104. 二叉树的最大深度

    给定一个二叉树 root ,返回其最大深度。

    二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

    示例 1:

    img

    输入:root = [3,9,20,null,null,15,7]
    输出:3
    
    • 1
    • 2

    示例 2:

    输入:root = [1,null,2]
    输出:2
    
    • 1
    • 2

    提示:

    • 树中节点的数量在 [0, 104] 区间内。
    • -100 <= Node.val <= 100

    教程:https://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#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

    视频:https://www.bilibili.com/video/BV1Gd4y1V75u/

    方法一:递归

    思路:

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n)

    • 空间复杂度: O ( n ) O(n) O(n)

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {}
        TreeNode(int val) { this.val = val; }
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    public class Solution {
        public int maxDepth(TreeNode root) {
            if(root==null) return 0;
            int leftDepth = maxDepth(root.left);
            int rightDepth = maxDepth(root.right);
            return Math.max(leftDepth, rightDepth) + 1;
        }
    
        public static void main(String[] args) {
            // 创建一棵二叉树
            TreeNode root = new TreeNode(3);
            root.left = new TreeNode(9);
            root.right = new TreeNode(20, new TreeNode(15), new TreeNode(7));
    
            // 调用 maxDepth 方法计算二叉树的最大深度
            Solution solution = new Solution();
            int depth = solution.maxDepth(root);
            System.out.println("The maximum depth of the binary tree is: " + depth);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

    111. 二叉树的最小深度

    给定一个二叉树,找出其最小深度。

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

    **说明:**叶子节点是指没有子节点的节点。

    示例 1:

    img

    输入:root = [3,9,20,null,null,15,7]
    输出:2
    
    • 1
    • 2

    示例 2:

    输入:root = [2,null,3,null,4,null,5,null,6]
    输出:5
    
    • 1
    • 2

    提示:

    • 树中节点数的范围在 [0, 105] 内
    • -1000 <= Node.val <= 1000

    教程:https://programmercarl.com/0111.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E6%B7%B1%E5%BA%A6.html

    视频:https://www.bilibili.com/video/BV1QD4y1B7e2/

    方法一:递归

    思路:

    复杂度分析:

    • 时间复杂度: O(n),其中 n 是树中节点的个数。

    • 空间复杂度: O(h),其中 h 是树的高度。

    class Solution {
        public int minDepth(TreeNode root) {
            if(root ==null) return 0;
            int leftDepth = minDepth(root.left);
            int rightDepth = minDepth(root.right);
            if(root.left == null){
                return rightDepth+1;
            }
            if(root.right == null){
                return leftDepth+1;
            }
            //左右结点都不为null
            return Math.min(leftDepth,rightDepth)+1;
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    222. 完全二叉树的节点个数

    给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

    完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

    示例 1:

    img

    输入:root = [1,2,3,4,5,6]
    输出:6
    
    • 1
    • 2

    示例 2:

    输入:root = []
    输出:0
    
    • 1
    • 2

    示例 3:

    输入:root = [1]
    输出:1
    
    • 1
    • 2

    提示:

    • 树中节点的数目范围是[0, 5 * 104]
    • 0 <= Node.val <= 5 * 104
    • 题目数据保证输入的树是 完全二叉树

    **进阶:**遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?

    教程:https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%AA%E6%95%B0.html

    视频:https://www.bilibili.com/video/BV1eW4y1B7pD/

    方法一:递归

    思路:

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( n ) O(n) O(n)
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {}
        TreeNode(int val) { this.val = val; }
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    class Solution {
        public int countNodes(TreeNode root) {
            if(root==null)  return 0;
            int leftNodes= countNodes(root.left);
            int rightNodes = countNodes(root.right);
            return leftNodes+rightNodes+1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    因子模型:协方差矩阵
    开咖啡店该如何做好管理?实现快速盈利
    手写简易Spring框架
    [electron] 从0开始环境搭建 macos
    (附源码)计算机毕业设计JavaJava毕设项目美容院管理系统
    14.3 Socket 字符串分块传输
    powershell和cmd对比
    Vue2和Vue3创建项目的区别
    LeetCode 1403 非递增顺序的最小子序列[贪心] HERODING的LeetCode之路
    前端 TS 快速入门之二:接口
  • 原文地址:https://blog.csdn.net/Catherinemin/article/details/134320915
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号