题目分析
本问题是典型的二叉树方案搜索问题,使用回溯法解决,其包含先序遍历 + 路径记录两部分
先序遍历:按照“根、左、右”的顺序,遍历树的所有节点。
路径记录:在先序遍历中,记录从根节点到当前节点的路径。当路径为 ① 根节点到叶节点形成的路径 且 ② 各节点值的和等于目标值 sum 时,将此路径加入结果列表。
算法流程
pathSum(root, sum) 函数:
初始化:结果列表 res ,路径列表 path。
返回值: 返回 res 即可。
递归终止条件:若节点node 为空,则直接返回。
递推工作:
- 路径更新: 将当前节点值 node.val 加入路径 path ;
- 目标值更新: sum = sum - node.val(即目标值 从 sum 减至 000 );
- 路径记录: 当 ① node 为叶节点 且 ② 路径和等于目标值 ,则将此路径 path 加入 res 。
- 先序遍历: 递归左 / 右子节点。
- 路径恢复: 向上回溯前,需要将当前节点从路径 path 中删除,即执行 path.pop() 。
代码如下: