输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:
给定如下二叉树,以及目标和 target = 22,
5/ \4 8/ / \11 13 4/ \ / \7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]
提示:节点总数 <= 10000
思路:
- dfs
const pathSum = (root, sum) => {const result = [];const dfs = function (root, path, totalSum) {if (!root) return;path.push(root.val);totalSum += root.val;if (!root.left && !root.right) {if (totalSum === sum) {result.push(path.slice());}}dfs(root.left, path, totalSum);dfs(root.right, path, totalSum);path.pop();}dfs(root, [], 0);return result;};
var pathSum = function (root, sum) {if (!root) return [];const res = [];dfs(root, sum, res, []);return res;};function dfs(root, sum, res, temp) {if (!root) return;temp.push(root.val); // 1. 选择if (!root.left && !root.right && sum === root.val) { // 2. 判断res.push([...temp]);} else {dfs(root.left, sum - root.val, res, temp); // 3. 递归dfs(root.right, sum - root.val, res, temp);}temp.pop(); // 4. 撤销选择}
