【题目】
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个 3叉树 :
我们应返回其最大深度,3。
来源:leetcode
链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/
【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 depth=0;
int maxDepth(Node* root) {
if(root==NULL)
return 0;
queue<Node*> q;
q.push(root);
Node* node;
while(!q.empty()){
depth++;
int qsize=q.size();
for(int i=0;i<qsize;i++){
node=q.front();
q.pop();
for(auto x:node->children)
q.push(x);
}
}
return depth;
}
};
【DFS迭代】
class Solution {
public:
int maxDepth(Node* root) {
if(root==NULL)
return 0;
stack<pair<Node*,int>> s;
s.push(pair<Node*,int>(root,1));
int max_depth=0;
while(!s.empty()){
Node* node=s.top().first;
int depth=s.top().second;
s.pop();
for(auto x:node->children)
s.push(pair<Node*,int>(x,depth+1));
max_depth=max(max_depth,depth);
}
return max_depth;
}
};
【递归】
class Solution {
public:
int maxDepth(Node* root) {
if(root==NULL)
return 0;
int depth=0;
for(auto x:root->children)
depth=max(depth,maxDepth(x));
return ++depth;
}
};