计算两个节点之间的最长路径.
路径在拱顶.
方法签名为:
public static int longestPath(Node n)
在下面的示例二叉树中,它是4(通过2-3-13-5-2).
这是我现在所做的,对于给定的树,它只返回0.
public static int longestPath(Node n) {
if (n != null) {
longestPath(n, 0);
}
return 0;
}
private static int longestPath(Node n, int prevNodePath) {
if (n != null && n.getLeftSon() != null && n.getRightSon() != null) {
int currNodePath = countLeftNodes(n.getLeftSon()) + countRightNodes(n.getRightSon());
int leftLongestPath = countLeftNodes(n.getLeftSon().getLeftSon()) + countRightNodes(n.getLeftSon().getRightSon());
int rightLongestPath = countLeftNodes(n.getRightSon().getLeftSon()) + countRightNodes(n.getRightSon().getRightSon());
int longestPath = currNodePath > leftLongestPath ? currNodePath : leftLongestPath;
longestPath = longestPath > rightLongestPath ? longestPath : rightLongestPath;
longestPath(n.getLeftSon(), longestPath);
longestPath(n.getRightSon(), longestPath);
return longestPath > prevNodePath ? longestPath : prevNodePath;
}
return 0;
}
private static int countLeftNodes(Node n) {
if (n != null) {
return 1+ countLeftNodes(n.getLeftSon());
}
return 0;
}
private static int countRightNodes(Node n) {
if (n != null) {
return 1+ countRightNodes(n.getRightSon());
}
return 0;
}
我明白我在某个地方错过了一个关键概念,当我尝试跟踪执行流程时,我的大脑变得疯狂
我是说,通过找到最根本的路径,左边和左边,右边的节点,然后在它的左边&正确的节点通过它们从以前的方法调用中最长的路径,最后(当?)返回最长的路径时,我不确定如何去返回它?