题目描述:
二叉树中,一个节点可以往上走和往下走,那么从节点A总能走到节点B。
节点A走到节点B的距离为:A走到B最短路径上的节点个数。
求一颗二叉树的最远距离。
思路分析:
1.分析可能性:
- 当前节点的最远距离来自它的左子树,不经过当前节点。
- 当前节点的最远距离来自它的右子树,不经过当前节点。
- 当前节点的最远距离经过它自己,最远距离等于左子树的最远距离加上右子树的最远距离加上头节点。
2 列信息全集:根据第一步的分析,我们可以得出,我们需要的信息有两个。
- 以当前节点为头节点的子树的高度。
- 以当前节点为头节点的子树的最远距离。
代码如下:
public class Code_03_MaxDistanceInTree {
public static class Node {
public int value;
public Node left;
public Node right;
public Node(int data) {
this.value = data;
}
}
public static class ReturnType{
public int maxDistance;
public int h;
public ReturnType(int m, int h) {
this.maxDistance = m;;
this.h = h;
}
}
public static ReturnType process(Node head) {
if(head == null) {
return new ReturnType(0,0);
}
ReturnType leftReturnType = process(head.left);
ReturnType rightReturnType = process(head.right);
int includeHeadDistance = leftReturnType.h + 1 + rightReturnType.h;
int p1 = leftReturnType.maxDistance;
int p2 = rightReturnType.maxDistance;
int resultDistance = Math.max(Math.max(p1, p2), includeHeadDistance);
int hitself = Math.max(leftReturnType.h, leftReturnType.h) + 1;
return new ReturnType(resultDistance, hitself);
}
}