image.png

解题思路

本题的目标是找树的最大直径,首先我们要明确:
一个节点的最大直径 = 它左树的高度 + 它右树的高度
然后其实就是遍历每个节点,找出所有节点中的直径的最大值即可。

code

  1. class Solution {
  2. //设置一个类变量,用于记录最大直径
  3. private int max = 0;
  4. public int diameterOfBinaryTree(TreeNode root) {
  5. depth(root);
  6. return max;
  7. }
  8. private int depth(TreeNode root){
  9. if(root == null){
  10. return 0;
  11. }
  12. int leftDepth = depth(root.left);
  13. int rightDepth = depth(root.right);
  14. //max记录当前的最大直径
  15. max = Math.max(leftDepth + rightDepth, max);
  16. //由于我计算的直径是左树高度+右树高度,所以这里返回当前树的高度,以供使用
  17. return Math.max(leftDepth, rightDepth) + 1;
  18. }
  19. }