1 问题
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
例如,给定一个 3叉树 :
我们应返回其最大深度,3。
2 解法
2.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 getDepth(Node* node)
{
if(node == nullptr)
return 0;
//遍历子树得到最大值
int depth = 0;
for(int i = 0; i < node->children.size(); i++)
{
//找到子节点的最大深度
depth = max(depth, maxDepth(node->children[i]));
}
//加上当前节点的深度
return depth + 1;
}
int maxDepth(Node* root) {
return getDepth(root);
}
};
2.2 迭代法
/*
// 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 == nullptr) return 0;
queue<Node*> que;
que.push(root);
int depth = 0;
while(!que.empty())
{
int size = que.size();
depth++;
for(int i = 0; i < size; i++)
{
Node* node = que.front();
que.pop();
for(int i = 0; i < node->children.size(); i++)
{
que.push(node->children[i]);
}
}
}
return depth;
}
};