一、题目
题目链接:力扣
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
二、题解
1、思路
😏 深度优先遍历DFS
如果我们知道了左子树和右子树的最大深度 ll 和 rr,那么该二叉树的最大深度即为
max(l,r) + 1
😏 广度优先遍历BFS
每遍历一层+1。
2、代码实现
😏 深度优先遍历DFS
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL)return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
😏 广度优先遍历BFS
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL)return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty())
{
depth++;// 层数累加
int length = que.size();
for(int i = 0; i < length; i++)
{
TreeNode* temp = que.front();
que.pop();
if(temp->left != NULL)que.push(temp->left);
if(temp->right != NULL)que.push(temp->right);
}
}
return depth;
}
};
3、复杂度分析
😏 深度优先遍历DFS
时间复杂度:O(n);n为树的节点数量;
空间复杂度:O(height)。其中height 表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。
😏 广度优先遍历BFS
时间复杂度:O(n);
空间复杂度:O(n)。
4、运行结果
😏 深度优先遍历DFS
😏 广度优先遍历BFS