Diameter of a Binary Tree

    和题 分析思路特别接近。

    1. int val;
    2. TreeNode left, right;
    3. TreeNode(int val) {
    4. this.val = val;
    5. this.left = null;
    6. this.right = null;
    7. }
    8. }
    9. public class Solution {
    10. public int diameter(TreeNode root) {
    11. // left, right height
    12. int rightHight = getHeight(root.right);
    13. // left, right subtree diameter
    14. int leftDia = diameter(root.left);
    15. int rightDia = diameter(root.right);
    16. int maxSubDia = Math.max(leftDia, rightDia);
    17. return Math.max(maxSubDia, leftHight + 1 + rightHight);
    18. }
    19. private int getHeight(TreeNode root) {
    20. if (root == null) return 0;
    21. return 1 + Math.max(getHeight(root.left), getHeight(root.right));
    22. public static void main(String[] args) {
    23. TreeNode root = new TreeNode(1);
    24. root.left = new TreeNode(2);
    25. root.right = new TreeNode(3);
    26. root.left.left = new TreeNode(4);
    27. root.left.right = new TreeNode(5);
    28. root.left.right.left = new TreeNode(6);
    29. root.left.right.left.right = new TreeNode(7);
    30. root.left.left.left = new TreeNode(8);
    31. Solution sol = new Solution();
    32. int maxDistance = sol.diameter(root);
    33. System.out.println("Max Distance: " + maxDistance);
    34. }