java 最长路径问题_java – 2节点之间的最长路径

计算两个节点之间的最长路径.

路径在拱顶.

方法签名为:

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;

}

我明白我在某个地方错过了一个关键概念,当我尝试跟踪执行流程时,我的大脑变得疯狂

我是说,通过找到最根本的路径,左边和左边,右边的节点,然后在它的左边&正确的节点通过它们从以前的方法调用中最长的路径,最后(当?)返回最长的路径时,我不确定如何去返回它?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值