Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
題意:
給定一個二叉樹,每個節點都有一個數字,還有一個目標數。找到一條路徑加總起來有達到目標數則返回true,若都沒有則返回flase
題解:
對這棵二叉樹進行左右子樹的歷遍,若到子節點有達到目標數則返回true,若到達空節點則返回false(此路徑沒有達到目標數)。
package LeetCode.Easy;
import LeetCode.Dependencies.TreeNode;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
* 給定一棵樹,還有目標數,若其中有一條路徑符合目標數,則返回true,若都沒有
* 則返回false
*/
public class PathSum {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null) {
return false;
}
return helper(root, sum);
}
boolean helper(TreeNode root, int sum) {
boolean hasPath = false;
//若已經到子節點下方,表示此路徑無法再繼續下去了,則返回false
if(root == null) {
return false;
}
sum = sum - root.val;
//若到子節點,sum為0,表示此條路徑加總符合sum,則返回ture
if(sum == 0 && root.left == null && root.right == null) {
return true;
}
//歷遍左右子樹
hasPath = hasPath || helper(root.left, sum);
hasPath = hasPath || helper(root.right, sum);
return hasPath;
}
}