mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Merge pull request #31 from HermanZzz/master
添加0112.路径总和与0113.路径总和ii JavaScript版本
This commit is contained in:
@ -312,6 +312,74 @@ Python:
|
|||||||
|
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
|
JavaScript:
|
||||||
|
|
||||||
|
0112.路径总和
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
/**
|
||||||
|
* @param {TreeNode} root
|
||||||
|
* @param {number} targetSum
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
let hasPathSum = function (root, targetSum) {
|
||||||
|
// 递归法
|
||||||
|
const traversal = (node, cnt) => {
|
||||||
|
// 遇到叶子节点,并且计数为0
|
||||||
|
if (cnt === 0 && !node.left && !node.right) return true;
|
||||||
|
// 遇到叶子节点而没有找到合适的边(计数不为0),直接返回
|
||||||
|
if (!node.left && !node.right) return false;
|
||||||
|
|
||||||
|
// 左(空节点不遍历).遇到叶子节点返回true,则直接返回true
|
||||||
|
if (node.left && traversal(node.left, cnt - node.left.val)) return true;
|
||||||
|
// 右(空节点不遍历)
|
||||||
|
if (node.right && traversal(node.right, cnt - node.right.val)) return true;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
if (!root) return false;
|
||||||
|
return traversal(root, targetSum - root.val);
|
||||||
|
|
||||||
|
// 精简代码:
|
||||||
|
// if (!root) return false;
|
||||||
|
// if (!root.left && !root.right && targetSum === root.val) return true;
|
||||||
|
// return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val);
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
0113.路径总和-ii
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let pathSum = function (root, targetSum) {
|
||||||
|
// 递归法
|
||||||
|
// 要遍历整个树找到所有路径,所以递归函数不需要返回值, 与112不同
|
||||||
|
const res = [];
|
||||||
|
const travelsal = (node, cnt, path) => {
|
||||||
|
// 遇到了叶子节点且找到了和为sum的路径
|
||||||
|
if (cnt === 0 && !node.left && !node.right) {
|
||||||
|
res.push([...path]); // 不能写res.push(path), 要深拷贝
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!node.left && !node.right) return; // 遇到叶子节点而没有找到合适的边,直接返回
|
||||||
|
// 左 (空节点不遍历)
|
||||||
|
if (node.left) {
|
||||||
|
path.push(node.left.val);
|
||||||
|
travelsal(node.left, cnt - node.left.val, path); // 递归
|
||||||
|
path.pop(); // 回溯
|
||||||
|
}
|
||||||
|
// 右 (空节点不遍历)
|
||||||
|
if (node.right) {
|
||||||
|
path.push(node.right.val);
|
||||||
|
travelsal(node.right, cnt - node.right.val, path); // 递归
|
||||||
|
path.pop(); // 回溯
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
if (!root) return res;
|
||||||
|
travelsal(root, targetSum - root.val, [root.val]); // 把根节点放进路径
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user