Diameter of a Binary Tree
和题 分析思路特别接近。
int val;
TreeNode left, right;
TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
public class Solution {
public int diameter(TreeNode root) {
// left, right height
int rightHight = getHeight(root.right);
// left, right subtree diameter
int leftDia = diameter(root.left);
int rightDia = diameter(root.right);
int maxSubDia = Math.max(leftDia, rightDia);
return Math.max(maxSubDia, leftHight + 1 + rightHight);
}
private int getHeight(TreeNode root) {
if (root == null) return 0;
return 1 + Math.max(getHeight(root.left), getHeight(root.right));
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.left.right.left = new TreeNode(6);
root.left.right.left.right = new TreeNode(7);
root.left.left.left = new TreeNode(8);
Solution sol = new Solution();
int maxDistance = sol.diameter(root);
System.out.println("Max Distance: " + maxDistance);
}