二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

即求路径经过节点数最大值 - 1
假设我们已知某节点左儿子向下遍历经过最多节点数L、右儿子向下遍历经过最多节点数R
则以该节点为起点的节点数最大值为L + R + 1
定义一个递归函数 depth(node) ,函数返回该节点为根的子树的深度,计算过程中会顺带计算最大节点数
java
class Solution {
int ans;
public int diameterOfBinaryTree(TreeNode root) {
ans = 1;
depth(root);
return ans -1;
}
int depth(TreeNode node){
if(node == null) return 0;
int L = depth(node.left);
int R = depth(node.right);
ans = Math.max(ans,L+R+1);
return Math.max(L,R) + 1;
}
}