给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
例如,给定一个 3叉树
:
我们应返回其最大深度,3。
说明:
- 树的深度不会超过
1000
。 - 树的节点总不会超过
5000
。
通过次数26,185提交次数37,551
解析:
想到了两个方法,1、 DFS 递归遍历
2、BFS 层次遍历
对于深度优先:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
int maxDepth(Node* root) { //DFS递归遍历
if(!root) return 0;
int deep=0 ;
for(int i=0;i<root->children.size();++i){
deep=max(deep,maxDepth(root->children[i]));
}
return deep+1;
}
};
对于广度优先:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
int maxDepth(Node* root){
if(!root){
return 0;
}
queue<Node*> que;
que.push(root);
int max_depth=0;
while(!que.empty()){
++max_depth;
for(int size=que.size();size;--size){
Node* curfather=que.front();
que.pop();
for(Node* it_level_children : curfather->children){
que.push(it_level_children);
}
}
}
return max_depth;
}
};