目录

力扣-Hot-100-刷题记录-二叉树的最大深度

力扣 Hot 100 刷题记录 - 二叉树的最大深度

力扣 Hot 100 刷题记录 - 二叉树的最大深度

题目描述

是力扣 Hot 100 中的一道经典题目,题目要求如下:

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

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


解题思路

这道题的核心是计算二叉树的最大深度。常用的方法有以下两种:

  1. 递归法

    • 递归地计算左子树和右子树的深度。
    • 最大深度为左子树和右子树深度的最大值加 1(当前节点)。
  2. 迭代法(广度优先搜索,BFS)

    • 使用队列进行层次遍历,记录遍历的层数。

C++ 代码实现

方法一:递归法

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (!root) return 0; // 递归终止条件

        int leftDepth = maxDepth(root->left);  // 左子树深度
        int rightDepth = maxDepth(root->right); // 右子树深度

        return max(leftDepth, rightDepth) + 1; // 返回最大深度
    }
};

方法二:迭代法

#include <queue>

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (!root) return 0;

        queue<TreeNode*> q;
        q.push(root);
        int depth = 0;

        while (!q.empty()) {
            int levelSize = q.size(); // 当前层的节点数
            depth++; // 层数加 1

            // 遍历当前层的所有节点
            for (int i = 0; i < levelSize; i++) {
                TreeNode* node = q.front();
                q.pop();

                // 将下一层的节点加入队列
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }

        return depth;
    }
};