题意
如题。注,沿途的节点数只能经过一次,路径上的节点数叫做A到B的距离。
题解
- 满足"依次求出每一个节点为根节点的二叉树的子树上的最大距离,那么最终答案一定在其中",所以可以使用树形dp。
- 详细分析步骤按树形dp步骤来即可,简单。
时间复杂度O(n)。
代码
class Type{
int maxDis;
int treeHeight;
public Type(int maxDis,int treeHeight) {
this.maxDis=maxDis;
this.treeHeight=treeHeight;
}
}
public class Main {
public static void main(String args[]) {
//test
Node n1=new Node(1);
Node n2=new Node(2);
Node n3=new Node(3);
Node n4=new Node(4);
Node n5=new Node(5);
n1.left=n2;
n1.right=n3;
n3.left=n4;
n3.right=n5;
int maxDis=maxDistance(n1).maxDis;
System.out.println(maxDis);
}
public static Type maxDistance(Node root) {
if(root==null) {
return new Type(0,0);
}
Type lMes=maxDistance(root.left);
Type rMes=maxDistance(root.right);
int disTemp=lMes.treeHeight+rMes.treeHeight+1;
int maxDis=Math.max(Math.max(lMes.maxDis, rMes.maxDis), disTemp);
int height=Math.max(lMes.treeHeight, rMes.treeHeight)+1;
return new Type(maxDis,height);
}
}