给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树,sum=22
返回true,因为存在一条路径 5→4→11→2 的节点值之和为 22。
思路
分成三种情况,
(1)节点不存在,返回false
(2)节点只有一个的时候,判定是否左子和右子均为空,且sum值等于该节点值
(3)递归的具体操作,递归左子和右子,同时更新sum的值,且结果为或的关系
var hasPathSum = function (root, sum) {
if (root === null) // 根节点为空
return false;
// 只有叶节点的情况
if (root.left === null && root.right === null)
return root.val === sum;
// 总和减去当前值,并递归
sum = sum - root.val
return hasPathSum(root.left, sum) || hasPathSum(root.right, sum);
};