給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
返回 true
, 因爲存在目標和爲 22 的根節點到葉子節點的路徑 5->4->11->2
。
思路:誒誒這道題前幾天做筆試題的遇見過類似的(是leetcode 路徑總和2),可惜當時沒刷到這道題。可見還是題寫的太少了…用遞歸想明白,那這道題是一道比較簡單的題。求根結點到某一葉子結點的總和能否爲一特定值,就先判斷根結點是否符合,不符合就用特定值減去根結點的值,來判斷左右字樹的值是否符合,符合後判斷是否爲葉子結點,如果是就輸出正確,不是就繼續向下查找。因爲不需要保存路徑,就比較簡單。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL) return false;
if(root->val == sum)
{
if(root->left ==NULL && root->right == NULL)
return true;
}
int a=sum-root->val;
return (hasPathSum(root->left,a) || hasPathSum(root->right,a));
}
};