LeetCode刷題112——路徑總和問題
阿新 • • 發佈:2019-02-08
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
返回 true
, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2
。
這道題剛拿到沒什麼思路,想著似乎只能暴力求解。
在網上搜索了一下大神的演算法,雖然只是簡單的遞迴呼叫,可是隔著螢幕我都想為這個巧妙的遞迴鼓掌!
話不多說,貼程式碼:
每次呼叫都令t=sum-root->val,再判斷是否為0。t=0則為true,反之為false。/** * 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); }