1. 程式人生 > >LeetCode刷題112——路徑總和問題

LeetCode刷題112——路徑總和問題

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

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

示例: 
給定如下二叉樹,以及目標和 sum = 22

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2

這道題剛拿到沒什麼思路,想著似乎只能暴力求解。

在網上搜索了一下大神的演算法,雖然只是簡單的遞迴呼叫,可是隔著螢幕我都想為這個巧妙的遞迴鼓掌!

話不多說,貼程式碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool hasPathSum(struct TreeNode* root, int sum) 
{
    if(root==NULL)
        return false;
    
    int t=sum-root->val;
    
    if(root->left==NULL&&root->right==NULL)
        return t==0?true:false;
    
    return hasPathSum(root->left,t)||hasPathSum(root->right,t);
}
每次呼叫都令t=sum-root->val,再判斷是否為0。t=0則為true,反之為false。