LeetCode 437
https://leetcode-cn.com/problems/path-sum-iii/
看了一眼这个题,再仔细思考了一会,我心想:这TM是简单题?
回溯和普通树的遍历思想都想过,还是解不出来,最后看评论区才学习到了一个新知识:双重递归。
因为这个题中,每一个节点都可能是路径的起始点,所以不能用普通树的遍历的思想去做。然后我们认为这个树的每个节点都是根节点,都采用一次路径查找的策略,就可以将所有可能的值寻找出来。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { int path = 0; public int pathSum(TreeNode root, int sum) { if(root == null){ return 0; } countSum(root, sum); pathSum(root.left, sum); pathSum(root.right, sum); return path; } private void countSum(TreeNode root, int sum){ if(root == null){ return; } sum -= root.val; if(sum == 0){ path++; } countSum(root.left,sum); countSum(root.right,sum); } }