给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
思路与一:在求二叉树深度的模板上进行修改
/*
// 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 dfs(Node *root){
if(!root) return 0;
int res=0;//这里不能设置为全局变量
for(int i=0;i<root->children.size();i++){
res =max(dfs(root->children[i]),res);
}
return res+1;
}
int maxDepth(Node* root) {
int ans = dfs(root);
return ans;
}
};
思路二:利用层次遍历求深度
/*
// 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==NULL) return 0;
queue<Node*> que;
if (root != NULL) que.push(root);
int depth = 0;
while (!que.empty()) {
int size = que.size();//这里简直了
depth++; // 记录深度
//写i<que.size()就无法通过,也是奇怪了
for (int i = 0; i < size; i++) {
Node* node = que.front();
que.pop();
for (auto it:node->children) {
que.push(it);
}
}
}
return depth;
}
};