二叉树的最远距离有下列几种情况:
- 根的左子树的最远距离+根节点+根的右子树最远距离
- 根的左子树上的最大距离(最大距离不是最远距离,可能跟的右子树比较短,根的左半部分存在某个结点(不一定是根的左孩子)使得以它为根满足的条件1最大)
- 根的右子树上的最大距离
public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } public static class Info{ int maxDistance; int height; public Info(int maxDistance, int height) { this.maxDistance = maxDistance; this.height = height; } } public static Info process(Node x) { if (x==null){ return new Info(0,0); } Info leftinfo=process(x.left); Info rightinfo=process(x.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 Info(height,maxDistance); } public static int maxDisstance(Node x){ if (x==null){ return 0; } return process(x).maxDistance; }