二叉树的最大距离,要求二叉树的最大距离,需要借助深度来判断,这里我创建了一个定义深度和结点距离的类,如下所示:
/**
* @author jcm
* 二叉树的最大距离
*时间 2016年8月26日
*/
class DepthAndDistance{
public int maxDepth;
public int maxDistance;
public DepthAndDistance(){
this.maxDepth = 0;
this.maxDistance = 0;
}
}
/**
* @author jcm
* @see 求二叉树的最大深度和最大距离
* @param root
* @return 返回二叉树的深度和距离
*/
public static DepthAndDistance GetBinaryTreeMaxDistance(BinaryTreeNode root){
if(root == null){
return new DepthAndDistance();
}
DepthAndDistance leftDepthAndDistance = new DepthAndDistance();
DepthAndDistance rightDepthAndDistance = new DepthAndDistance();
leftDepthAndDistance = GetBinaryTreeMaxDistance(root.leftTreeNode);
rightDepthAndDistance = GetBinaryTreeMaxDistance(root.rightTreeNode);
DepthAndDistance maxDistance = new DepthAndDistance();
maxDistance.maxDepth = Math.max(leftDepthAndDistance.maxDepth+1, rightDepthAndDistance.maxDepth+1);
maxDistance.maxDistance = Math.max(Math.max(leftDepthAndDistance.maxDistance, rightDepthAndDistance.maxDistance), leftDepthAndDistance.maxDepth+rightDepthAndDistance.maxDepth+2);
return maxDistance;
}