文章目录
104.二叉树最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
二叉树的深度和高度
深度是二叉树中任意一个节点到根节点的距离。例如上图中的节点20,深度是2(到根节点距离是2),节点7的深度就是3,到根节点距离为3个节点。(此处深度从1开始不是从0开始,只是为了对比)
高度是二叉树中任意一个节点到叶子节点的距离。例如下图,根节点高度是3,节点6的高度是2。

二叉树算法中,求高度是后序遍历,求深度是前序遍历。
因为求高度是从下往上进行计数,因此我们需要从下往上进行遍历,而后序的遍历顺序是左右中,可以把叶子节点的信息返回给父节点,父节点直接在叶子节点高度信息+1即可。
求深度是从上往下进行计数,此时用前序遍历也就是中左右的顺序,往下遍历的过程中+1。
思路
这道题目中,求的是二叉树的最大深度,其实二叉树根节点的高度就是他的最大深度。因此这道题很多题解都是后序遍历。但是如果真正求深度的话,应该是用前序遍历来实现。
后序遍历写法
- 这种写法求的是根节点的高度,根节点高度=最大深度,求高度用的是后序遍历
- 左右中,中是处理过程,才能把左右孩子信息累积到父节点的高度上,实现从底向上计数
//确定递归参数和返回值
//通过求根节点高度来得到他的最大深度
int getHeight(TreeNode* root){
//确定终止条件
if(root==NULL){
//节点为空的时候高度是0
return 0;
}
//确定递归单层逻辑,后序遍历左右中
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
//中的处理
int height = 1+max(leftHeight,rightHeight);
return height;
}
完整版
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==NULL){
return 0;
}
//单层逻辑:后序遍历左右中
int leftHeight = maxDepth(root->left);
int rightHeight = maxDepth(root->right);
int height = 1+max(leftHeight,rightHeight);
return height;
}
};
前序遍历写法
这道题用后序是比较简便的写法,因为求根节点的高度可以直接得到二叉树的最大深度。如果这道题用求深度的思路,也就是前序遍历来做的话,相对比较复杂,但是能充分表现出求深度回溯的过程

文章详细介绍了如何使用后序遍历和前序遍历求解二叉树的最大深度和最小深度。在最大深度问题中,后序遍历可以直接得到根节点的高度,即最大深度;而在最小深度问题中,同样利用后序遍历,但需注意排除空节点。文章强调了回溯的概念,以及在递归过程中如何保持和更新深度信息。
1257

被折叠的 条评论
为什么被折叠?



