题目描述

题解
/**
* 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
* }
* }
*/
// 直接递归
// 还记得【Leetcode】104. 二叉树的最大深度,和这道题有异曲同工之处,
// 本题实际就是找左右子树的深度最大和,深度最大和可以通过递归+贪心的方式
// ,通过不断更新res找到。
//
// 解答基本上跟【Leetcode】104. 二叉树的最大深度 很像,稍微修改一下就行。
// 定义答案保存位res,
// 定义depth函数,如果root为null,直接返回0,否则,调用depth(root.left)结果
// 赋给int left,调用depth(root.right)结果赋给int right,取res和right+left
// 中的最大值,贪心地赋给res。最后函数还是老样子,返回left和right中最大的
// 那个再+1。
//
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:38.5 MB, 在所有 Java 提交中击败了39.54%的用户
class Solution {
int res = 0
public int diameterOfBinaryTree(TreeNode root) {
if (root == null)
return res
depth(root)
return res
}
public int depth(TreeNode root) {
if (root == null) {
return 0
}
int left = depth(root.left)
int right = depth(root.right)
res = Math.max(res, left + right)
return Math.max(left, right) + 1
}
}