BM28 二叉树的最大深度
知识点树dfs
描述
求给定二叉树的最大深度,深度是指树的根节点到任一叶子节点路径上节点的数量。最大深度是所有叶子节点的深度的最大值。(注:叶子节点是指没有子节点的节点。)
数据范围:,树上每个节点的val满足
要求: 时间复杂度
示例1
输入:
{1,2}
复制返回值:
2
复制
示例2
输入:
{1,2,3,4,#,#,5}
复制返回值:
3
题解
可以使用递归和非递归的方式进行求解。非递归其实就是借鉴层次遍历的方法。不再赘述,具体见代码实现。
递归实现
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
int maxDepth_r(TreeNode *root)
{
if (root == nullptr)
{
return 0;
}
int left = maxDepth_r(root->left) + 1;
int right = maxDepth_r(root->right) + 1;
return std::max(left, right);
}
非递归实现
int maxDepth(TreeNode *root)
{
int level = 0;
if (root == nullptr)
{
return level;
}
std::queue<TreeNode *> q;
q.push(root);
while (!q.empty())
{
int n = q.size();
while (n-- > 0)
{
auto node = q.front();
q.pop();
if (node->left != nullptr)
{
q.push(node->left);
}
if (node->right != nullptr)
{
q.push(node->right);
}
}
level++;
}
return level;
}