543. 二叉树的直径
分析
-
主函数
diameterOfBinaryTree
- 初始化全局变量
res
,用来存储最大直径 - 调用辅助函数
dfs
,从根节点开始递归计算深度和路径长度 - 返回
res
- 初始化全局变量
-
辅助函数
dfs
- 基本情况:如果当前节点为空,返回深度为
0
- 递归计算左右子树深度:分别调用
dfs(root->left)
和dfs(root->right)
- 更新直径:
- 当前节点的路径长度为
left + right
- 更新
res
为max(res, left + right)
- 当前节点的路径长度为
- 返回节点深度:节点的深度是其左右子树深度的最大值加
1
- 基本情况:如果当前节点为空,返回深度为
时间复杂度
时间复杂度 O(n)
,其中 n
是节点总数,每个节点访问一次
空间复杂度
空间复杂度 O(h)
,其中 h
是树的高度,递归栈的深度
C++代码
|
|