LC104 二叉树的最大深度
一.任务描述:
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
二.解题思路:
递归思路
采用深度优先搜索(DFS)的后序遍历方式:
基线条件:空节点深度为0
递归关系:当前节点深度 = 1 + max(左子树深度, 右子树深度)
三.代码实现:
C
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
int maxDepth(struct TreeNode* root) {if (root == NULL) {return 0;}int left_depth = maxDepth(root->left);int right_depth = maxDepth(root->right);return 1 + (left_depth > right_depth ? left_depth : right_depth);
}四.优化方向:
迭代解法避免栈溢出
对于深度很大的树,递归可能导致栈溢出,可以使用迭代方法:
C
// BFS迭代解法
int maxDepthBFS(struct TreeNode* root) {if (root == NULL) return 0;struct TreeNode** queue = malloc(10000 * sizeof(struct TreeNode*));int front = 0, rear = 0, depth = 0;queue[rear++] = root;while (front < rear) {depth++;int level_size = rear - front;for (int i = 0; i < level_size; i++) {struct TreeNode* node = queue[front++];if (node->left) queue[rear++] = node->left;if (node->right) queue[rear++] = node->right;}}free(queue);return depth;
}五.总结:
1.核心技巧:
分治思想:将大问题分解为小问题(子树)
后序遍历:先处理子问题,再合并结果
递归三要素:终止条件、递归过程、结果合并
2.扩展思考:二叉树的最小深度
C
int minDepth(struct TreeNode* root) {if (root == NULL) return 0;if (!root->left) return 1 + minDepth(root->right);if (!root->right) return 1 + minDepth(root->left);return 1 + fmin(minDepth(root->left), minDepth(root->right));
}