leetcode 112 路徑總和——c++_easy

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。

示例: 
給定如下二叉樹,以及目標和 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));
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章