import java.util.LinkedList;
import java.util.Queue;
/**
* 树两点间最大距离
* @author Administrator
*
*/
public class BinaryTreeTwoPointMaxDis {
// 两点之间最大距离
int sum = 0;
//树的最大深度等于当前节点深度 1 加左右子树最大深度:1+max(left_height,right_height)
public int maxDepth(TreeNode root) {
if (root == null) return 0;
int left_height = maxDepth(root.left);
int right_height = maxDepth(root.right);
sum = Math.max(sum,left_height+right_height);
return Math.max(left_height, right_height) + 1;
}
// 使用数组建立完全二叉树
public TreeNode buildTree(int[] datas) {
Queue<TreeNode> TreeNodeQueue = new LinkedList<TreeNode>();
TreeNode root = new TreeNode(datas[0]);
TreeNodeQueue.add(root);
for (int i = 1; i < datas.length; i++) {
// 取出队列中的第一个元素
TreeNode current = TreeNodeQueue.peek();
if (current != null) {
if (current.left == null) {
current.left = new TreeNode(datas[i]);
TreeNodeQueue.add(current.left);
} else {
current.right = new TreeNode(datas[i]);
TreeNodeQueue.add(current.right);
TreeNodeQueue.remove();
}
}
}
return root;
}
public int getSum()
{
return this.sum;
}
public static void main(String[] args) {
int[] nums = {3,5,6,7,8,9,10,22,12};
BinaryTreeTwoPointMaxDis solution = new BinaryTreeTwoPointMaxDis();
TreeNode root = solution.buildTree(nums);
solution.maxDepth(root);
System.out.println(solution.getSum());
}
}