
java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
//全局变量,记录直径
int maxDiameter = 0;
public int diameterOfBinaryTree(TreeNode root) {
getDepth(root);
return maxDiameter;
}
//返回当前以node为根的子树的最大深度
private int getDepth(TreeNode node){
if(node == null){
return 0;
}
//左右子树的深度
int leftDepth = getDepth(node.left);
int rightDepth = getDepth(node.right);
//记算最大直径
maxDiameter = Math.max(maxDiameter,leftDepth + rightDepth);
return Math.max(leftDepth , rightDepth) + 1;
}
}
路径可能不经过root节点,也就是说可能只在一边,所以不能直接只去计算左子树深度+右子树深度。
所以对于每个节点都要计算出它的左子树+右子树的深度