104.二叉树的最大深度
力扣题目链接
class solution {
public:
int getdepth(TreeNode* node) {
if (node == NULL) return 0;
int leftdepth = getdepth(node->left); // 左
int rightdepth = getdepth(node->right); // 右
int depth = 1 + max(leftdepth, rightdepth); // 中
return depth;
}
int maxDepth(TreeNode* root) {
return getdepth(root);
}
};
深度和高度的区别你清楚吗?
准确的来讲上面的这个代码求的是高度。
代码随想录 (programmercarl.com)
这题有很多种解法,想详细了解的朋友看上面的链接哦!
这是我的代码实现~命名应该是有点不规范。
虽然我用的是后序遍历但是,
前序(中左右)的遍历顺序,这才是真正求深度的逻辑!
111.二叉树的最小深度
力扣题目链接
class Solution {
public:
int getDepth(TreeNode* node) {
if (node == NULL) return 0;
int leftDepth = getDepth(node->left); // 左
int rightDepth = getDepth(node->right); // 右
// 中
// 当一个左子树为空,右不为空,这时并不是最低点
if (node->left == NULL && node->right != NULL) {
return 1 + rightDepth;
}
// 当一个右子树为空,左不为空,这时并不是最低点
if (node->left != NULL && node->right == NULL) {
return 1 + leftDepth;
}
int result = 1 + min(leftDepth, rightDepth);
return result;
}
int minDepth(TreeNode* root) {
return getDepth(root);
}
};
这题主要要理解最低点的定义,避免出错哦!
递归的代码是不是还挺好记的?哈哈哈,但是重点一定要理解,特别是它递归的部分,我感觉自己好像还不是特别理解。