LeetCode112.路徑總和
阿新 • • 發佈:2018-11-10
題目來源: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); }