【每日一題】LeetCode. 112.路徑總和

每日一題,防止癡呆 = =

一、題目大意

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

說明: 葉子節點是指沒有子節點的節點。
在這裏插入圖片描述
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/path-sum

二、題目思路以及AC代碼

思路

一開始把這道題看成了樹中是否存在一條由根節點出發的路徑,使得路徑和爲sum,沒有注意必須是葉子節點,但是其實方法是一樣的,都是bfs或者dfs,在這裏因爲遞歸實現起來比較容易,所以我選擇了dfs進行實現。

AC代碼
/**
 * 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 check(TreeNode* root, int sum, int target) {
        // 如果節點值沒有負的,則可以再剪枝
        // 不過這裏我試了一下,節點值是有負的的 = =
        sum += root->val;
        if (sum == target && !root->left && !root->right) return true;

        bool left = root->left ? check(root->left, sum, target) : false;
        bool right = root->right ? check(root->right, sum, target) : false; 

        return left || right;
    }

    bool hasPathSum(TreeNode* root, int sum) {
        if (!root) return false;
        return check(root, 0, sum);
    }
};

如果有問題,歡迎大家指正!!!

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