问题描述
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
代码
var pathSum = function(root, sum) {
if (!root) return [];
let res = [];
dfs(root, sum, res, []);// 深度优先
return res;
};
function dfs(root, sum, res, temp){
if(!root) return [];
temp.push(root.val);// 预存当前节点
if(!root.left && !root.right && sum == root.val){// 若当前节点为叶子结点且当前sum的值与之相等,则找到一个序列
res.push([...temp]);
}else {// 若不到叶子结点,则继续深度优先
dfs(root.left, sum-root.val, res, temp);
dfs(root.right, sum-root.val, res, temp);
}
temp.pop();// 若不符合则预存值出栈
}