返回
深入浅出:JavaScript版剑指Offer——二叉树中和为某一值的路径
前端
2023-11-02 10:15:27
前言
对于前端开发者来说,掌握算法和数据结构的知识是十分重要的。剑指Offer作为一本经典的算法题集,备受广大程序员的推崇。本文将使用JavaScript来解决其中一道经典题目——二叉树中和为某一值的路径。
题目
给定一棵二叉树和一个目标值,找到所有从根节点到叶子节点的路径,使得路径上的节点值之和等于目标值。
解题思路
这道题属于二叉树的深度优先遍历。首先我们要了解DFS的遍历过程:
- 从根节点开始遍历。
- 访问当前节点。
- 访问当前节点的左子节点。
- 访问当前节点的右子节点。
当root节点走到null的时候,说明该条路径已经遍历完毕。
当一条路径上的节点值之和等于目标值时,我们就把这条路径记录下来。
代码实现
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number[][]}
*/
const pathSum = (root, targetSum) => {
const result = [];
const path = [];
const dfs = (root, sum) => {
if (root === null) {
return;
}
path.push(root.val);
sum += root.val;
if (root.left === null && root.right === null && sum === targetSum) {
result.push(path.slice());
}
dfs(root.left, sum);
dfs(root.right, sum);
path.pop();
sum -= root.val;
};
dfs(root, 0);
return result;
};
实例解析
我们来看一个具体的例子。给定一颗二叉树:
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
目标值为22。
使用上述代码进行求解,可以得到以下结果:
[[5, 4, 11, 2], [5, 8, 4, 5]]
这两个路径上的节点值之和都等于目标值22。
总结
这篇文章详细介绍了如何使用JavaScript解决剑指Offer中的二叉树中和为某一值的路径问题。我们从题目的入手,分析了解题思路,并给出了详细的代码实现。最后,我们还通过一个实例来演示了代码的使用方法。