题目描述
图片说明
运行结果
图片说明
解题思路
重点就是理解题意--肯定涉及到求树的深度
注意路径可以不过根节点(也就是可以不涉及右子树)
但最长路径一定是路过根节点或者各级子树的根节点
经过某个节点的路径的节点数:为其左右子树的深度+1(左子树的深度是从根节点到最下的节点数)
在求某个子树的深度时,将经过该子树的路径长度进行更新(记录最大值)
java代码

/**
 * 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) {
        ans=1;
        heigth(root);
        return ans-1;
    }
    //求子树的深度
    public int heigth(TreeNode root){
        if(root == null) return 0;
        int L=heigth(root.left);
        int R=heigth(root.right);
        //使ans始终记录路径的最大值
        ans=Math.max(L+R+1,ans);
        return 1+Math.max(L,R);
    }
}