1. 程式人生 > >LeetCode112.路徑總和

LeetCode112.路徑總和

題目來源:https://leetcode-cn.com/problems/path-sum/description/

題目描述:

演算法描述: 

1.如果根節點為NULL,直接返回false。否則呼叫check函式

2.當遍歷完一條路徑之後,如果sum==a,返回true。否則返回false

3.如果左子樹為空,右子樹不為空。則右子樹遞迴。如果右子樹為空,左子樹不為空。則左子樹遞迴

4如果左右子樹都不為空,左右子樹進行遞迴,只要其中一條路徑返回true。那最後的結果就是true

程式碼如下:

bool check(struct TreeNode* t, int sum, int a) {
	//當遍歷完一條路徑之後,如果sum==a,返回true。否則返回false
    if(t == NULL) return (sum == a);
    //如果左子樹為空,右子樹不為空。則右子樹遞迴
    if(t->left == NULL&&t->right != NULL) return check(t->right, sum+t->val, a);
    //如果右子樹為空,左子樹不為空。則左子樹遞迴
    if(t->left != NULL&&t->right == NULL) return check(t->left, sum+t->val, a);
    //如果左右子樹都不為空,左右子樹進行遞迴,只要其中一條路徑返回true。那最後的結果就是true
    return check(t->left, sum+t->val, a)||check(t->right, sum+t->val, a);
}
bool hasPathSum(struct TreeNode* root, int sum) {
    if(root == NULL) return false;
    return check(root, 0, sum);
}