void FindSum(TreeNode *root, int sum, vector<int> row, vector< vector<int> > &ret) { if(root==NULL) return; else if(root->val==sum&&root->left==NULL && root->right==NULL) { row.push_back(root->val); ret.push_back(row); return; } row.push_back(root->val); FindSum(root->left, sum-root->val,row,ret); FindSum(root->right, sum-root->val,row,ret); }
void FindSum(const vector<int> &C, const size_t s, vector<int> tmp, set<vector<int>> &res, const int target) { if (s >= C.size()) { return; } for (size_t i = s; i < C.size(); ++i) { if (C[i] == target) { tmp.push_back(C[i]); res.insert(tmp); tmp.pop_back(); continue; } if (C[i] < target) { tmp.push_back(C[i]); FindSum(C, i + 1, tmp, res, target - C[i]); tmp.pop_back(); } else { return; } } }
void FindSum(Node* pNode, int nTargetSum) { int nDepth = TreeDepth(pNode); vector< int > path(nDepth, 0); FindSum(pNode, path, nTargetSum, 0); }
int FindSum(int l,int u, int p) { int mid=(low[p]+up[p])/2; if(u > up[p] || l<low[p]) { return 0; } if(low[p]==up[p]) return A[p]; if(u <= mid) return FindSum(l, u, 2*p); if(l >= mid+1) return FindSum(l, u, 2*p+1); if(l==low[p] && u==up[p]) return A[p]; return (FindSum(l,mid, 2*p)+FindSum(mid + 1, u, 2*p+1)); }
vector<vector<int>> pathSum(TreeNode* root, int sum) { vector< vector<int> > ret; vector<int> row; FindSum(root,sum,row,ret); return ret; }
void FindSum(Node* pNode, vector< int >& path, int nTargetSum, int nLevel) { if (nullptr == pNode) return; path[nLevel] = pNode->data; int nSum = 0; for (int i = nLevel; i >= 0; --i) { nSum += path[i]; if (nSum == nTargetSum) PrintResult(path, i, nLevel); } FindSum(pNode->pLeft, path, nTargetSum, nLevel + 1); FindSum(pNode->pRight, path, nTargetSum, nLevel + 1); }
void main() { BSTree oBSTree; oBSTree.Insert(100); oBSTree.Insert(50); oBSTree.Insert(150); oBSTree.Insert(25); oBSTree.Insert(75); oBSTree.Insert(125); oBSTree.Insert(175); oBSTree.Insert(110); FindSum(oBSTree.pRoot, 75); }
int main() { int n,i,x,y; BuildTree(0,32000,1); scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d%d", &x, &y); AddNode(x,1); y = FindSum(0, x, 1); y--; cnt[y]++; } for(i=0; i<n; i++) { printf("%d\n", cnt[i]); } return 0; }
vector<vector<int> > combinationSum2(vector<int> &num, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int>> res; if (0 == num.size()) { return res; } sort(num.begin(), num.end()); vector<int> tmp; set<vector<int>> se; FindSum(num, 0, tmp, se, target); for (set<vector<int>>::const_iterator it = se.begin(); it != se.end(); ++it) { res.push_back(*it); } return res; }
int main(){ printf("\nEnter length of array : "); int n; scanf("%d",&n); int* array=(int*)malloc(sizeof(int)*n); int i; printf("\nEnter the element of the array : "); for(i=0;i<n;i++){ scanf("%d",&array[i]); } int* BITree=(int*)malloc(sizeof(int)*(n+1)); for(i=0;i<=n;i++){ BITree[i]=0; } for(i=0;i<n;i++){ ConstructBIT(BITree,array[i],i,n); } printf("\nInitial BTree\n"); for(i=0;i<=n;i++){ printf("%d ",BITree[i]); } int start,end; printf("\nEnter a range to find sum : "); scanf("%d %d",&start,&end); int result=FindSum(BITree,start,end,n); printf("\nRange sum is : %d",result); getch(); int index,value; printf("\nEnter index and new value : "); scanf("%d %d",&index,&value); int diff=value-array[index]; /* printf("\n"); for(i=0;i<=n;i++){ printf("%d ",BITree[i]); } printf("\nDiff is : %d",diff); printf("\n"); for(i=0;i<=n;i++){ printf("%d ",BITree[i]); } getch(); */ UpdateBIT(BITree,diff,index,n); printf("\nEnter a range to find sum : "); scanf("%d %d",&start,&end); result=FindSum(BITree,start,end,n); printf("\nRange sum is : %d",result); getch(); return 0; }