求给定二叉树的半径。
半径:二叉树中距离最远的两个节点的距离。如下面的二叉树,最远的距离为从节点4或5到节点3的距离,该距离为3。
注意:半径所经过的路径可以包含root,也可能不包含root。
分析:对于任意一棵子树,半径实际上就是以下三者之中的最大值:左子树的半径、右子树的半径、左子树的高度和右子树的高度之和。
class Solution {
private int diameter = 0;
public int diameterOfBinaryTree(TreeNode root) {
if(root == null)
return 0;
height(root);
return diameter;
}
public int height(TreeNode root){
if(root == null)
return 0;
int leftHeight = height(root.left);
int rightHeight = height(root.right);
if(leftHeight + rightHeight > diameter) //如果左子树的高度 + 右子树的高度 > 左右子树的半径,更新半径值
diameter = leftHeight + rightHeight;
return Math.max(leftHeight, rightHeight) + 1; //返回高度
}
}