import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int diameterOfBinaryTree (TreeNode root) {
// write code here
// 解题思路:1.首先求到每个节点的最大深度。
// 2.在求每个节点的左右节点的最大深度,左右节点的最大深度相加就是最终的结果
// 3.分别比较所有节点的最大深度和
if (root == null) {
return 0;
}
int left = dfs(root.left);
int right = dfs(root.right);
int sum = left + right;
return Math.max(Math.max(sum, diameterOfBinaryTree(root.left)),
diameterOfBinaryTree(root.right));
}
private int dfs(TreeNode node) {
if (node == null) {
return 0;
}
return Math.max(dfs(node.left), dfs(node.right)) + 1;
}
}