首页 > 其他 > 详细

二叉树中和为某一值的路径

时间:2020-08-29 09:54:32      阅读:90      评论:0      收藏:0      [点我收藏+]

题目描述:输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

说明:这题真的看不懂,先把别人写的粘过来,日后再研究吧。

方法一:

  1. 首先我们可以发现,我们需要遍历整个二叉树,所以我们需要一个辅助function来帮助我们遍历每个节点。在此时我们可以运用DFS
  2. 然后,我们需要注意的是,我们同时需要一个Arraylist帮助我们储存我们来到遍历的当前节点之前的路径
  3. 接着,我们需要一个Arraylist<ArrayList<integer>>来作为我们最后需要返回的结果,来储存所有 2 里符合条件的Arraylist</integer>

这题有一个重点,就是 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径, 所以我们要确保最后一个加进去Arraylist的节点为叶节点,即确保当前遍历的节点无左孩子也无右孩子。

 

代码:

技术分享图片技术分享图片

 

方法二:

注意题的要义是根结点到叶子结点值为和才是路径,所以在这次的题目中不断对树的每一个孩子进行一个新的状态的递归求和,当回溯的时候,就需要进行状态重置,而状态重置在本题中需要进行两次!

  • 一次是左子树完事,回溯,状态重置
  • 一次是右子树完事,回溯,状态重置

而且分外注意!对于叶子结点要额外处理,叶子结点的左右孩子都为 null,对于一条正确的路径:不能让它回溯两次,因为:

  • 第一次状态,到底 null,得到正确答案
  • 回溯
  • 第二次状态,再次到底 null,又得到正确答案
  • 回溯

可以看到回得到两次答案,重复了,所以要判断一下叶子结点的情况,其他非叶子结点就回溯两次

代码:
技术分享图片技术分享图片

二叉树中和为某一值的路径

原文:https://www.cnblogs.com/lf6688/p/13580779.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!