
回溯
/** * 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 hasPathSum(TreeNode root, int targetSum) { if(root == null ) return false; return traversal(root,targetSum - root.val); } public boolean traversal(TreeNode cur, int count ) { // 遇到叶子节点,并且计数为0 if( cur.left == null && cur.right == null && count == 0 ) return true; // 遇到叶子节点直接返回 if( cur.left == null && cur.right == null ) return false; if(cur.left != null ) { // 左 count -= cur.left.val; // 递归,处理节点; if(traversal(cur.left,count) ) return true; count += cur.left.val; // 回溯,撤销处理结果 } if(cur.right != null ) { count -= cur.right.val; // 递归,处理节点; if(traversal(cur.right,count) ) return true; count += cur.right.val; // 回溯,撤销处理结果 } return false; }}
回溯
/** * 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 hasPathSum(TreeNode root, int targetSum) { if(root == null ) return false; // 叶子节点判断是否符合 if(root.left == null && root.right == null ) return root.val == targetSum; // 求两侧分支的路径和 return hasPathSum(root.left,targetSum - root.val) || hasPathSum(root.right,targetSum - root.val); }}