题目链接: N 叉树的最大深度
有关题目
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
提示:
树的深度不会超过 1000 。
树的节点数目位于 [0, 10^4] 之间。
题解
法一:深度优先搜索(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 maxDepth(Node* root) {
if (root == nullptr)
return 0;
vector<Node *> children = root->children;//拿到当前节点的所有子树
int maxChildDepth = 0;//存放当前节点中所有子树中最大深度
//找出所有子树中最大深度
for (auto &child : children)
{
int childDepth = maxDepth(child);
maxChildDepth = max(maxChildDepth, childDepth);
}
return maxChildDepth + 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) {
if (root == nullptr)
return 0;
queue<Node *> q;//优先搜索队列
int ans = 0;
q.push(root);
while(!q.empty())
{
//一层一层从队列中拿出节点
int sz = q.size();
while(sz > 0)
{
Node *node = q.front(); q.pop();
vector<Node *> children = node->children;//将node下的所有子树记录
for (auto &child : children)
{
q.push(child);
}
sz--;
}
ans++;
}
return ans;
}
};