题目链接
递归
递归函数什么时候需要返回值?
- 如果需要搜索整棵二叉树且不需要处理递归返回值,递归函数不要返回值
- 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数需要返回值
- 如果搜索其中一条条件的路径,递归一定需要返回值,遇到符合条件的路径需要及时返回
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean traversal(TreeNode root, int count){
// 叶子节点 + 计数为0,返回true
if(root.left == null && root.right == null && count == 0){
return true;
}
// 叶子节点,计数不为0,返回false
if(root.left == null && root.right == null){
return false;
}
if(root.left != null){
// 递归,处理节点
count -= root.left.val;
if(traversal(root.left,count)){
return true;
}
// 回溯,撤销处理结果
count += root.left.val;
}
if(root.right != null){
count -= root.right.val;
if(traversal(root.right,count)){
return true;
}
count += root.right.val;
}
return false;
}
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null){
return false;
}
return traversal(root,targetSum - root.val);
}
}