https://leetcode-cn.com/problems/path-sum/
如果当前节点是叶子节点,就判断值是否和给定的sum相等,不相等则说明这条路径不满足要求。通向各个叶子节点的路径有一条即可返回true
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) { return false; } if (root.left == null && root.right == null) { return root.val == sum; } return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val); } }这里也可以自定义一种类型,来保存节点和当前的和。 如果数据范围过大也要注意变量保存的范围,一下代码仅可参考。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) { return false; } Queue<TreeNode> nodeQueue = new LinkedList<>(); Queue<Integer> valQueue = new LinkedList<>(); nodeQueue.offer(root); valQueue.offer(root.val); while (!nodeQueue.isEmpty()) { for (int i = nodeQueue.size(); i > 0; i--) { TreeNode node = nodeQueue.poll(); int curSum = valQueue.poll(); if (node.left == null && node.right == null && curSum == sum) { return true; } if (node.left != null) { nodeQueue.offer(node.left); valQueue.offer(curSum + node.left.val); } if (node.right != null) { nodeQueue.offer(node.right); valQueue.offer(curSum + node.right.val); } } } return false; } }