104.二叉树的最大深度(队列层序遍历+递归)
559.N叉树的最大深度
解题思路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*> que;
if (root != NULL) 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 j = 0; j < node->children.size(); j++) {
if (node->children[j]) que.push(node->children[j]);
}
}
}
return depth;
}
};
执行用时:12 ms, 在所有 C++ 提交中击败了92.92%的用户
内存消耗:10.5 MB, 在所有 C++ 提交中击败了55.63%的用户
通过测试用例:38 / 38
解题思路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:
//递归1 返回类型和参数
int maxDepth(Node* root) {
//递归2 终止条件
if(root == NULL) return 0;
int dep = 0;
//递归3 遍历孩子节点
for(int i=0;i<root->children.size();i++){
dep = max(dep,maxDepth(root->children[i]));
}
return dep + 1; //递归一次,层数+1
}
};
执行用时:8 ms, 在所有 C++ 提交中击败了99.26%的用户
内存消耗:10.5 MB, 在所有 C++ 提交中击败了82.46%的用户
通过测试用例:38 / 38