【二叉树】104.二叉树的最大深度

计算二叉树最大深度:递归方法maxDepth解析
文章讲述了如何使用递归方法`maxDepth`计算给定二叉树的最大深度,当根节点为空时返回0,否则递归求左子树和右子树的最大深度并返回1加上较大值。

题目

Python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))

Java

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return 1 + Math.max(leftDepth, rightDepth);
    }
}
提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
计算二叉树最大深度是算法中一个常见的问题,通常可以通过递归或者迭代的方式实现。下面将分别介绍这两种方法的具体实现。 ### 1. 使用递归的方法 递归是一种直观且简单的方法,其核心思想是:当前节点的深度等于左子树和右子树深度的最大值加上1(当前节点本身的深度)。递归的终止条件是当节点为空时,返回深度0。 以下是基于递归方法的Java代码实现: ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } public class BinaryTreeMaxDepth { 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); root.right.left = new TreeNode(15); root.right.right = new TreeNode(7); BinaryTreeMaxDepth solution = new BinaryTreeMaxDepth(); int maxDepth = solution.maxDepth(root); System.out.println("二叉树最大深度为:" + maxDepth); } } ``` ### 2. 使用迭代的方法 与递归方法不同,迭代方法使用队列来模拟递归的过程,通过层级遍历的方式计算最大深度。这种方法可以避免递归可能导致的栈溢出问题。 以下是基于迭代方法的Java代码实现: ```java import java.util.LinkedList; import java.util.Queue; class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int level = 0; while (!queue.isEmpty()) { int count = queue.size(); level++; while (count > 0) { TreeNode current = queue.poll(); if (current.left != null) { queue.offer(current.left); } if (current.right != null) { queue.offer(current.right); } count--; } } return level; } } ``` ### 方法对比 - **递归方法**:实现简单、代码简洁,但可能在大规模数据的情况下导致栈溢出。 - **迭代方法**:使用队列进行层级遍历,避免了栈溢出的问题,适用于更广泛的数据规模[^1]。 两种方法都能正确计算二叉树最大深度,选择哪一种取决于具体的应用场景和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值