题目描述
给出二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
提示:
树中节点总数在范围 [0, 5000]
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
解法:采用先序遍历
- 先判断根节点是否为null,是则调用collection的静态方法emptylist,好处是emptylist不用创建对象引用直接返回null,且不必进行非空判断。
- 初始化存储路径的res,以及记录单条从根节点到叶子节点路径的值path
- 调用递归函数,传入根节点root和目标值sum
- 递归内部:首先判断root是否为null,即判断是否到达叶子节点,到达递归函数临界点,返回。
- 如果root节点有子节点,就将该节点值存入path,存入后,将之前更新的sum值与当前的节点值比较,如果想同,且该节点为叶子节点即满足条件,将根节点到此叶子节点的路径值存入res中保存结果,在下一个递归触碰临界条件后返回到另一条路径进行新的比较查询。
- 注意:下面的remove方法实现每次触碰临界条件后的路径返回得以依次删除path的最后一个节点值,消除记录并进行新一轮记录。当所有路径都遍历完时,结束递归,返回res
path.remove(path.size() - 1);
因为此题中的节点值可以为负数,因此必须把每条路径的所有值计算完。若题目条件中节点值限定为正数,则可以加一条判断语句,当更新后的sum值小于当前节点值时return,直接计算下一条路径