예제 #1
0
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);
}
예제 #2
0
 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;
         }
     }
 }
예제 #3
0
void FindSum(Node* pNode, int nTargetSum)
{
	int nDepth = TreeDepth(pNode);
	vector< int > path(nDepth, 0);

	FindSum(pNode, path, nTargetSum, 0);
}
예제 #4
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));
}
예제 #5
0
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
    vector< vector<int> > ret;
vector<int> row;
FindSum(root,sum,row,ret);
return ret;


}
예제 #6
0
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);
}
예제 #7
0
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);
}
예제 #8
0
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;
}
예제 #9
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;
 }
예제 #10
0
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;
}