tecxon123
BAN USERvoid print_subset(int *A, int K)
{
int i;
for(i=0; i<K; i++)
fprintf(stderr, "%d ", A[i]);
fprintf(stderr, "\n");
}
void print_combination(int *A, int *B, int k, int pos, int start, int N, int K)
{
int i;
assert(k>=0 && k<N);
assert(pos >=0 && pos<N);
assert(start >=0);
if(k==0){
print_subset(B, K);
return;
}
if(start >= N)
return;
for(i=start; i<N; i++){
B[pos] = A[i];
print_combination(A, B, k-1, pos+1, i+1, N, K);
}
}
/* BST to Double Link List */
struct node_t{
int data;
struct node_t *left;
struct node_t *right;
}
node_t *mergeDLists(node_t *left, node_t *node, node_t *right)
{
assert(node != NULL);
node_t *head;
/* merge left and node */
if(left!=NULL){
head = left;
while(left->right != NULL){
left = left->right;
}
left->right = node;
node->left = left;
}else{
head = node;
}
/* merge node and right */
node->right=right;
right->left = node;
return head;
}
node_t *convertToDList(node_t *node)
{
if(NULL == node)
return NULL;
node_t *left = convertToList(node->left);
node_t *right = convertToList(node->right);
return mergeLists(left, node, right);
}
/* BST to link List */
struct node_t{
int data;
struct node_t *left;
struct node_t *right;
}
node_t *mergeLists(node_t *left, node_t *node, node_t *right)
{
assert(node != NULL);
node_t *head;
/* merge left and node */
if(left!=NULL){
head = left;
while(left->next != NULL){
left = left->right;
left->right = NULL;
}
left->next=node;
}else{
head = node;
}
/* merge node and right */
node->next=right;
return head;
}
node_t *convertToList(node_t *node)
{
if(NULL == node)
return NULL;
node_t *left = convertToList(node->left);
node_t *right = convertToList(node->right);
return mergeLists(left, node, right);
}
- tecxon123 February 25, 2014