説明タイトル:
二分木と目的地が与えられると、ツリー経路にリーフノードにルートノードは、このルート上のすべてのノードが存在し、目標値に等しいが付加されているか否かを判定する。
説明:リーフノードは、ノードが子ノードを持たないです。
例:
、次のバイナリツリーを考えると、ターゲットとの和= 22
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
trueを返し、なぜなら、ターゲットパスの存在及びリーフノード22 5-> 4-> 11-> 2のルートノード。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/path-sum
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
回答:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool func(struct TreeNode* root, int cur, int sum)
{
if(NULL == root) return false;
cur = cur + root->val;
if(NULL == root->left && NULL == root->right)
{
if(sum == cur) return true;
}
return func(root->left, cur, sum) || func(root->right, cur, sum);
}
bool hasPathSum(struct TreeNode* root, int sum)
{
int cur = 0;
return func(root,cur,sum);
}
結果: