/**
 * 给定一棵二叉树的头节点,求这棵树上的最大距离
 */
public class MaxDistance {
    public static int maxDistance(Node head) {
        return process(head).maxDistance;
    }
    public static ResultInfo process(Node node) {
        if (node == null) {
            return new ResultInfo(0, 0);
        }
        ResultInfo leftInfo = process(node.left);
        ResultInfo rightInfo = process(node.right);
        int height = Math.max(leftInfo.height, rightInfo.height) + 1;
        int maxDistance = Math.max(Math.max(leftInfo.maxDistance, rightInfo.maxDistance), leftInfo.height + rightInfo.height + 1);
        return new ResultInfo(maxDistance, height);
    }
    /**
     * 向左右子树索要信息
     */
    public static class ResultInfo {
        // 当前最大距离
        public int maxDistance;
        // 当期高度
        public int height;
        public ResultInfo(int dis, int h) {
            maxDistance = dis;
            height = h;
        }
    }
    /**
     * 二叉树结构
     */
    public static class Node {
        public Node left;
        public Node right;
    }
}
/* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */