一、二叉树根节点到叶子节点和为指定值的路径
(1)题目
给定一个节点数为 n 的二叉树和一个值 sum ,请找出所有的根节点到叶子节点的节点值之和等于的路径,如果没有则返回空。
例如:
给出如下的二叉树,sum = 22 ,
(2)思路
(3)实现
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型二维数组
*/
function pathSum( root , sum ) {
let res=[],path=[];
if(!root) return res;
// 先序遍历
let dfs = function(root,sum,path){
if(!root) return;
path.push(root.val);
if(!root.left && !root.right && sum==root.val){
res.push([...path]);
path.pop(); //回溯
return;
}
root.left && dfs(root.left,sum-root.val,path);
root.right && dfs(root.right,sum-root.val,path);
path.pop(); //回溯
}
dfs(root,sum,[]);
return res;
}
module.exports = {
pathSum : pathSum
};
二、二叉树中是否存在节点和为指定值的路径
(1)题目
给定一个二叉树和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径,
例如:
给出如下的二叉树,\ sum=22 sum=22,
(2)实现
function hasPathSum( root , sum ) {
if(!root) return false
if(!root.left && !root.right && sum==root.val){
return true;
}
return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}