方法一:dfs(类似于求二叉树的高度)
class Solution {
public:
int maxDepth(Node* root) {
if(root==NULL)
return 0;
int max=0;
for(int i=0;i<root->children.size();++i){
int len=maxDepth(root->children[i]);
max=(max>len)?max:len;
}
return max+1;
}
};
递归解法运行会比较慢。
解法二:BFS (每访问完一层,长度加一),类似于二叉树的层次遍历
class Solution {
public:
int maxDepth(Node* root) {
if(root==NULL)
return 0;
queue<Node*> q;
q.push(root);
int layerNodeCnt=q.size();//当前层的节点个数
int len=0;
Node* cur=NULL;
while(!q.empty()){
cur=q.front();
q.pop();
for(int i=0;i<cur->children.size();++i){
q.push(cur->children[i]);
}
if(--layerNodeCnt==0){//当前层访问完毕时
++len;
layerNodeCnt=q.size();//更新下一层节点数
}
}
return len;
}
};