题目
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int ans;//路径中的节点数
public int diameterOfBinaryTree(TreeNode root) {
if(root==null)
return 0;
ans=1;
dfs(root);
return ans-1;//路径长度=路径中的节点数-1
}
public int dfs(TreeNode root){
if(root==null)
return 0;
int res=0;
int left=dfs(root.left);
int right=dfs(root.right);
ans=Math.max(ans,left+right+1);//更新最大结点数
return Math.max(left,right)+1;//以当前节点为根的子树的深度
}
}
复杂度
时间复杂度:O(N),其中 N 为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。
空间复杂度:O(Height),其中 Height 为二叉树的高度。由于递归函数在递归过程中需要为每一层递归函数分配栈空间,所以这里需要额外的空间且该空间取决于递归的深度,而递归的深度显然为二叉树的高度,并且每次递归调用的函数里又只用了常数个变量,所以所需空间复杂度为 O(Height)。