输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
提示:
节点总数 <= 10000
思路:
1.从根节点开始dfs遍历,全局变量保存最大深度。
AC代码:(C++)
class Solution {
public:
int max_length;
int maxDepth(TreeNode* root) {
dfs(root, 0); //从根节点开始遍历
return max_length;
}
void dfs(TreeNode* root, int depth) {
if (root == NULL) {
if (depth > max_length) max_length = depth;
return;
}
dfs(root->left, depth + 1);
dfs(root->right, depth + 1);
}
};
2.bfs遍历树,每遍历一层,计数器+1,直到遍历完成,则可以得到树的深度。
AC代码:(C++)
class Solution {
public:
int count = 0;
int maxDepth(TreeNode *root) {
if (root == nullptr) return 0;
queue<TreeNode *> q;
q.push(root);
int res = 0;
while (!q.empty()) {
queue<TreeNode *> temp;
for (int i = q.size(); i > 0; i--) {
TreeNode *node = q.front();
q.pop();
if (node->left != nullptr) q.push(node->left);
if (node->right != nullptr) q.push(node->right);
}
count++;
}
return count;
}
};