给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解体思路:
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 maxDepth(Node* root) {
if(root==NULL) return 0;
int maxdepth=0;
for(int i=0;i<root->children.size();i++)
{
maxdepth=max(maxdepth,maxDepth(root->children[i]));
}
return maxdepth+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) {
queue<Node*>qu;
Node* node;
int size,depth=0;
if(root!=NULL) qu.push(root);
while(!qu.empty())
{
size=qu.size();
depth++;
for(int i=0;i<size;i++)
{
node=qu.front();
qu.pop();
for(int i=0;i<node->children.size();i++)
{
if(node->children[i]) qu.push(node->children[i]);
}
}
}
return depth;
}
};