LeetCode.104. Maximum Depth of Binary Tree

本文探讨了如何使用递归方法来计算二叉树的最大深度,并通过具体代码示例介绍了深度优先搜索(DFS)的实现过程。同时解答了为什么采用特定的数据结构和方法论。

数据结构没学好,对这个题没有思路,简单看了下二叉树的基本概念。找了一份正确答案研究。

public class Solution {
    public int maxDepth(TreeNode root) {
 if (root == null){
            return 0;
        }
        List <Integer> res = new ArrayList<>();
        dfs(res, root, 0);
        return res.get(0);
    }

    private void dfs(List<Integer> res, TreeNode curr, int count) {
        count += 1;
        if(curr.left == null && curr.right == null){
            if (res.isEmpty()){
                res.add(count);
            }
            if (count > res.get(0)){
                res.set(0, count);
                return;
            };
        }
        if (curr.left != null) {
            dfs(res, curr.left, count);
        };
        if (curr.right != null) {
            dfs(res, curr.right, count);
        }; 
    }
}

必须用递归?
为什么定义了一个没有返回值的方法?
为什么不直接用整形变量存放当前最大的深度而用List?

【SCI复现】基于纳什博弈的多微网主体电热双层共享策略研究(Matlab代码实现)内容概要:本文围绕“基于纳什博弈的多微网主体电热双层共享策略研究”展开,结合Matlab代码实现,复现了SCI级别的科研成果。研究聚焦于多个微网主体之间的能源共享问题,引入纳什博弈理论构建双层优化模型,上层为各微网间的非合作博弈策略,下层为各微网内部电热联合优化调度,实现能源高效利用与经济性目标的平衡。文中详细阐述了模型构建、博弈均衡求解、约束处理及算法实现过程,并通过Matlab编程进行仿真验证,展示了多微网在电热耦合条件下的运行特性和共享效益。; 适合人群:具备一定电力系统、优化理论和博弈论基础知识的研究生、科研人员及从事能源互联网、微电网优化等相关领域的工程师。; 使用场景及目标:① 学习如何将纳什博弈应用于多主体能源系统优化;② 掌握双层优化模型的建模与求解方法;③ 复现SCI论文中的仿真案例,提升科研实践能力;④ 为微电网集群协同调度、能源共享机制设计提供技术参考。; 阅读建议:建议读者结合Matlab代码逐行理解模型实现细节,重点关注博弈均衡的求解过程与双层结构的迭代逻辑,同时可尝试修改参数或扩展模型以适应不同应用场景,深化对多主体协同优化机制的理解。
这段代码是用**递归法**实现的**求二叉树的最大深度**,属于非常经典且简洁的递归解法。 --- ## 🧠 函数作用 ```cpp int maxDepth(TreeNode* root) ``` - **功能**:返回以 `root` 为根节点的二叉树的最大深度(即树有多少层)。 - **返回值类型**:`int` - **输入参数**:`TreeNode* root`,表示当前子树的根节点。 --- ## 🧾 代码详解 ```cpp if (root == nullptr) { return 0; } ``` - **递归终止条件**:如果当前节点为空,说明这是一棵空树或递归到了叶子节点的子节点,深度为 0。 ```cpp int l_depth = maxDepth(root->left); int r_depth = maxDepth(root->right); ``` - **递归调用**: - `l_depth`:递归求左子树的最大深度。 - `r_depth`:递归求右子树的最大深度。 ```cpp return max(l_depth, r_depth) + 1; ``` - **返回当前树的深度**: - 当前节点的深度 = 左右子树中较大的深度 + 1(加上当前节点这一层)。 --- ## 🔍 举例说明 假设二叉树结构如下: ``` 3 / 9 \ 15 \ 7 ``` 递归调用过程如下(简化): 1. `maxDepth(3)` - `left` 是 9,`right` 是 null - 进入 `maxDepth(9)` - `left` 是 null,`right` 是 15 - 进入 `maxDepth(15)` - `left` 是 null,`right` 是 7 - 进入 `maxDepth(7)` -> 返回 1 - 返回 `1 + 1 = 2` - 返回 `2 + 1 = 3` - 返回 `3 + 1 = 4` 所以最终返回 `4`,即这棵树的最大深度是 4 层。 --- ## ✅ 算法特点 | 特性 | 说明 | |------|------| | 时间复杂度 | O(n),其中 n 是节点数,每个节点只访问一次 | | 空间复杂度 | O(h),h 是树的高度(递归栈的空间) | | 算法类型 | DFS(深度优先搜索)中的后序遍历思想 | | 是否递归 | ✅ 是 | --- ## ❗ 注意事项 - 该算法适合**递归实现**,但在**树非常深**的情况下可能会导致栈溢出。 - 如果要避免栈溢出,可以用**迭代法**(如层序遍历)实现。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值