逆回溯法?力扣竞赛题-收集树上所有苹果的最小时间

开门看题:收集树上所有苹果的最少时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目分析

题意很好理解,从根节点出发,找到所有带苹果的节点,然后返回根节点,问最短路径是多长。
看图来说,这不就是典型的回溯法吗?!顺便想个更新路径长度的策略就ok了!
但是最棘手的也是以前没有遇到过的问题摆在眼前,这个树状图的形状是由二维数组给出的,而且还要将带苹果的节点对应上。。。
回溯法陷入了僵局,正向思维貌似走进了死胡同,来试试逆向思维。
我们从含有苹果的叶子节点出发,向上一直找到根节点,如图1,4–>1–>0,当在从节点5出发时,到达节点1就可以停止了,所以,我们要为已经走过的路径所经过的节点设置一个状态值:true,这样寻找路径5–>1(true),便停止。在遍历到节点2,路径2–>0。设置一个全局变量记录路径长度,搞定!
①因为要向上查找,所以要记录所有从孩子节点到父节点的连接边,可以对edges进行反转得到: int reverseEdges[]
②需要记录每个节点的状态,该节点是由已经被已走路径路过:boolean visited[]
③遍历每个节点,当该节点带苹果时,开始向上寻找路径,直到找到根节点,同时记录路径长度(因为原题是一来一回,所以最后的路径长度要*2)。

Java代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值