給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等于目標和。
說明:?葉子節點是指沒有子節點的節點。
示例:?
給定如下二叉樹,以及目標和 sum = 22,
? ? ? ? ? ? ? 5
? ? ? ? ? ? ?/ \
? ? ? ? ? ? 4 ? 8
? ? ? ? ? ?/ ? / \
? ? ? ? ? 11 ?13 ?4
? ? ? ? ?/ ?\ ? ? ?\
? ? ? ? 7 ? ?2 ? ? ?1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
思路:遞歸判斷即可。
注意是到葉子節點為止,我一開始做錯了。
錯誤代碼:
/*** 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(sum==0 && root==null)return true;if(sum<0 || root==null)return false;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 && sum==root.val && root.left==null && root.right==null)return true;if(root==null)return false;return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);}}
?