一、给你二叉树的根节点 root
和一个表示目标和的整数 targetSum
。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum
。如果存在,返回 true
;否则,返回 false
。
112. 路径总和 - 力扣(LeetCode)
/*** 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 sum){if(root.left==null&&root.right==null&&sum==0)return true;if(root.left==null&&root.right==null&&sum!=0)return false;if(root.left!=null){sum-=root.left.val;if(traversal(root.left,sum))return true;sum+=root.left.val;//回溯}if(root.right!=null){sum-=root.right.val;if(traversal(root.right,sum))return true;sum+=root.right.val;}return false;}public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null)return false;return traversal(root,targetSum-root.val);}
}
二、给你二叉树的根节点 root
和一个整数目标和 targetSum
,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
113. 路径总和 II - 力扣(LeetCode)
class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> res=new ArrayList<>();if(root==null)return res;List<Integer> path=new LinkedList<>();traversal(root,targetSum,res,path);return res;}public void traversal(TreeNode root, int targetSum,List<List<Integer>> res,List<Integer> path){path.add(root.val);if(root.left==null&&root.right==null&&targetSum-root.val==0)res.add(new ArrayList<>(path));if (root.left!=null) {traversal(root.left,targetSum-root.val,res,path);path.remove(path.size()-1); // 回溯}if (root.right!=null) {traversal(root.right,targetSum-root.val,res,path);path.remove(path.size()-1);}}
}