题目:
给定一个二叉树和一个值 sum,判断是否有从根节点到叶子节点的节点值之和等于sum 的路径
实现逻辑:
其实就是对二叉树进行遍历,每次遍历时,指定值sum减去当前节点的值,如果此刻sum为0,且无左右子树,则说明该二叉树存在节点和为指定值的路径;
示例:
步骤 | 操作 | 是否叶子节点 | 路径 | 减去当前节点后的sum值 |
---|---|---|---|---|
1 | 访问节点3 | 否 | 3 | 7 |
2 | 访问节点2 | 否 | 3→2 | 5 |
3 | 访问节点1 | 是 | 3→2→1 | 4 |
4 | 访问节点5 | 是 | 3→2→5 | 0 |
5 | 访问节点8 | 否 | 3→8 | -1 |
4 | 访问节点10 | 是 | 3→8→10 | -11 |
总上述,当路径为:3→2→5时,节点值为10等于指定值sum,即存在节点和为指定值的路径,返回true;
源码:
public boolean hasPathSum (TreeNode root, int sum) {
//当前节点为空
if(root==null){
return false;
}
//减去当前节点值
sum-=root.val;
//如果为叶子节点且sum=0,返回true
if(sum==0&&root.left==null&&root.right==null){
return true;
}
//对左右子树进行递归
return hasPathSum(root.left,sum)||hasPathSum(root.right,sum);
}