二叉树路径搜索问题

1、求任意二叉树中的所有路径
细想一下,这其实是一个DFS问题。有一个helper函数,用来向list中添加String。这里为什么要用静态的String而不是动态的StringBuilder?另一个问题是,要动态地添加内容给list,从思路上讲应该是回溯法。回溯用动态子结构比如list的话,就需要在每一次list.add时,做一次remove。典型的求全排列的问题,用String试试看。
第二个子问题是,为什么同样是动态结构,这道题用StringBuilder就不行?是可以的。但在lists.add后不要return。而回溯用的remove在递归调用left和right之后。这里有无return有何关系?有return 就铁定没有后面的remove了。也就是lists加入new ArrayList(tmp)后,直接返回,而不是remove后返回。
另外一个不同点是,对于全排列中的数组,进行的是线性遍历,而对于二叉树乃至图来说,就有DFS和BFS之分,这里是DFS,也就是用递归。
实际上,全排列问题的求解,在逻辑上的结构也是树状的,为什么也是树状的呢?大概只要需要进行分类讨论的问题,不管有没有用自动机,程序的结构都是树状的吧。但程序的研究对象可以不是。
再想了一遍,全排列问题中的数组没有二叉树这样的整齐结构,所以要用到for循环进行遍历。遍历+递归一次只能有一个结果。要得到其余结果,则要进行remove才可以。
2、求二叉树中指定和的路径
思路同上,加一个sum变量和一个判断sum是否满足要求的语句即可。
如果将String换成List
3、另一种二叉树的路径,从一个叶节点到另一个叶节点,求最大值。
略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值