踩坑记录[10]——LeetCode 104题:二叉树的最大深度
题目描述 —— 理解二叉树前中后序遍历的最简单例子
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
提示:
- 树中节点的数量在
[0, 104]
区间内。 -100 <= Node.val <= 100
答案(C++语言,已通过LeetCode测试)
class Solution {
public:
void traverse(TreeNode* root){
if(root == nullptr){
if(result < depth) result = depth;
return;
}
depth++;
traverse(root->left); // 遍历左子树
traverse(root->right); // 遍历右子树
depth--;
}
int maxDepth(TreeNode* root) {
traverse(root);
return result;
}
private:
int depth = 0;
int result = 0;
};
方案描述
本题本质为对二叉树进行遍历,遍历到一个节点时将深度+1,从该节点离开时将深度-1。
递归遍历二叉树,在每个结点执行:
- 如果是空,比较当前节点的depth和目前存储的result的大小,存储更大的,然后返回
- 不是空:去遍历以该节点为根节点的左子树和右子树
- 当遍历左子树前:depth++ (因为此时判断这个节点不是空,当前的depth可以增加一个)
- 遍历右子树完成后:depth-- (遍历完右子树说明这个节点操作已经完成,会返回到父节点,depth减少一个)
踩坑记录
要注意理解二叉树遍历中,前序、中序、后序操作的作用和区别。
如本题中:
depth++
位于前序位置:意味着当遍历到此节点时深度增加
depth--
位于后序位置:意味着当离开此节点时深度减小