题目描述
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
解题思想
可以使用层序遍历
cpp
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
queue<TreeNode*> que;
int depth = 0;
que.push(root);
while (!que.empty()) {
vector<int> vec;
for (int i = que.size(); i > 0; i--) {
TreeNode* tmp = que.front();
que.pop();
vec.push_back(tmp->val);
if(tmp->left) que.push(tmp->left);
if(tmp->right) que.push(tmp->right);
}
++depth;
}
return depth;
}
};
解题思想
使用递归:后序遍历,求高度 。 高度==深度
cpp
class Solution {
public:
int getDepth(TreeNode* node) {
if (node == nullptr) return 0;
//左
int leftH = getDepth(node->left);
//右
int rightH = getDepth(node->right);
//中
int height = 1 + max(leftH, rightH);
return height;
}
int maxDepth(TreeNode* root) {
return getDepth(root);
}
};
精简版
cpp
class Solution {
public:
int getDepth(TreeNode* node) {
if (node == nullptr) return 0;
return 1 + max(getDepth(node->left), getDepth(node->right));
}
int maxDepth(TreeNode* root) {
return getDepth(root);
}
};