题目描述
给定一棵 n 叉树,返回它最大的深度。
最大的深度指的是从根结点到最远的叶子结点的最长路径经过的结点个数。
例如,给定一棵 3叉树
:
返回其最大的深度 3。
注意
- 树的深度最大为 1000。
- 总结点个数最多为 5000。
算法
(深度优先遍历) $O(n)$
- 按照深度优先遍历的方式,自底向上获取当前结点到叶子结点的最大深度。
- 叶子结点的深度为 1。递归时,返回当前结点的子结点中深度最大的结点然后加 1。
时间复杂度
- 每个结点仅遍历一次,故时间复杂度为 $O(n)$。
C++ 代码
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
int dfs(Node *r) {
if (r == NULL)
return 0;
int d = 1;
for (auto ch : r -> children)
d = max(d, dfs(ch) + 1);
return d;
}
int maxDepth(Node* root) {
return dfs(root);
}
};
想请教一下,为什么我的dfs在一个的测试样例里会超时呀?
class Solution {
public:
int maxDepth(Node root) {
int res = 0;
dfs(root, 0, res);
return res;
}
void dfs(Node root, int level, int &res) {
if (!root) return;
level++;
if (root->children.empty()) {
res = max(res, level);
return;
}
for (auto p : root->children) {
dfs(p, level, res);
dfs(p, level, res);
}
return;
}
};
谢谢😀
你可以去问答的板块开启一个提问,这样大家都能看得到,而且格式会更清晰
好的好的 谢谢~