题目描述
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
思路
(当前节点记为root,剩下的和记为remain,当前记录的路径记为cur,最终结果res)
递归:二叉树中节点值的和为sum的路径,即子树中节点值的和为sum-root.val的路径。
递归退出条件:走到叶子结点,且减掉节点值后remain为0。
递推工作:remain -= root.val, 将root.val加入cur路径。递推左节点,再递推右节点,从cur中删去当前节点,返回上一层递归。
代码:
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @param {number} sum * @return {number[][]} */ var pathSum = function(root, sum) { let res = []; let cur = []; recursion(root, sum, cur, res); return res; }; function recursion(root, remain, cur, res){ if(!root) return; cur.push(root.val); remain -= root.val; if(remain === 0 && !root.left && !root.right){ res.push(Array.of(...cur)); } recursion(root.left, remain, cur, res); recursion(root.right, remain, cur, res); cur.pop(); }
易错:
原文:https://www.cnblogs.com/xintangchn/p/13190615.html