0
点赞
收藏
分享

微信扫一扫

[二叉树]BM28 二叉树的最大深度-简单

​​BM28 二叉树的最大深度​​

知识点​​树​​​​dfs​​

描述

求给定二叉树的最大深度,深度是指树的根节点到任一叶子节点路径上节点的数量。最大深度是所有叶子节点的深度的最大值。(注:叶子点是指没有子点的节点。)



数据范围:[二叉树]BM28 二叉树的最大深度-简单_dfs,树上每个节点的val满足 [二叉树]BM28 二叉树的最大深度-简单_广度优先遍历_02

要求: 时间复杂度 [二叉树]BM28 二叉树的最大深度-简单_广度优先遍历_03

示例1

输入:

{1,2}

复制返回值:

2

复制

示例2

输入:

{1,2,3,4,#,#,5}

复制返回值:

3

题解

可以使用递归和非递归的方式进行求解。非递归其实就是借鉴层次遍历的方法。不再赘述,具体见代码实现。

递归实现

#include <bits/stdc++.h>

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;
}
举报

相关推荐

0 条评论