LeetCode104 maximum-depth-of-binary-tree

题目

Given the root of a binary tree, return its maximum depth.

A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

 Example 1: 
Input: root = [3,9,20,null,null,15,7]
Output: 3

 Example 2: 
Input: root = [1,null,2]
Output: 2

 Example 3: 
Input: root = []
Output: 0

 Example 4: 
Input: root = [0]
Output: 1

 Constraints: 
 The number of nodes in the tree is in the range [0, 10]. 
 -100 <= Node.val <= 100 

方法

递归法

max(left,right)+1

  • 时间复杂度:O(n),n是二叉树节点的个数
  • 空间复杂度:O(h),h是二叉树的高度
Java版本:
class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left,right)+1;
    }
}

Js版本:
var maxDepth = function(root) {
    if(root==null) return 0;
    return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
};

迭代法

类似层序遍历二叉树,只是每次一行的节点遍历完之后才增加层数

  • 时间复杂度:O(n),n是二叉树节点的个数
  • 空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)
Java版本:
class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int h = 0;
        while(!queue.isEmpty()){
            h++;
            int len = queue.size();
            for(int i=0;i<len;i++){
                TreeNode node = queue.poll();
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
            }
        }
        return h;
    }
}
Js版本:
var maxDepth = function(root) {
    if(root==null)return 0;
    let max = 0;
    const queue = [];
    queue.push(root);
    while (queue.length){
        max++;
        let size = queue.length;
        for(let i=0;i<size;i++){
            let node = queue.shift();
            if(node.left!==null) queue.push(node.left);
            if(node.right!==null) queue.push(node.right);
        }
    }
    return max;
};
posted @   你也要来一颗长颈鹿吗  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示