int main()
{
	/*
	1. Inserting the elements.
	2. Searching the elements.
	3. Inroder, postorder and preorder.
	4. Height of the tree.
	*/
	struct node *root = NULL;
	insert_elements(&root, 5);
	insert_elements(&root, 5);
	insert_elements(&root, 3);
	insert_elements(&root, 7);

	printf("\nHeight of the BST: %d\n", height_BST(root));
	insert_elements(&root, 1);
	insert_elements(&root, 2);
	insert_elements(&root, 6);
	insert_elements(&root, 8);
	print_tree_inorder(root);
	printf("\n");
	//print_tree_postorder(root);
	insert_elements(&root, 22);
	print_tree_postorder(root);
	printf("\n");
	print_tree_preorder(root);
	printf("\n");
	// A tree with only the root is of height 0
	printf("\nHeight of the BST: %d\n", height_BST(root));
	printf("\n%d\n", search_elements(&root, 4));
}
Beispiel #2
0
struct list *insert_elements(struct node *n, struct list *l)
{
    struct list *l1 = n->p;
    while(l1 != NULL)
    {
        l = list_insert(l, l1->a);
        l1 = l1->next;    
    }
    if(n->left !=NULL)
        l = insert_elements(n->left, l);
    if(n->right != NULL)
        l = insert_elements(n->right, l);
    return l;
}
Beispiel #3
0
int main()
{
	vector<int> coll;

	insert_elements(coll, 1, 9);
	print_elements(coll, "coll:     ");

	// shuffle all elements randomly
	random_shuffle(coll.begin(), coll.end());

	print_elements(coll, "shuffled: ");

	// sort them again
	sort(coll.begin(), coll.end());
	print_elements(coll, "sorted:   ");

	// shuffle elements with default engine
	default_random_engine dre;
	shuffle(coll.begin(), coll.end(), dre);                      

	print_elements(coll, "shuffled: ");


	MyRandom rd;
	random_shuffle(coll.begin(), coll.end(), rd);                 

	print_elements(coll, "own random engine shuffled result: ");
}
Beispiel #4
0
int main()
{
	vector<int> coll;
	vector<int>::iterator pos;

	insert_elements(coll, 1, 9);
	print_elements(coll, "coll: ");

	// define an object for the predicate (using a lambda)
	auto isEven = [](int elem) {
		return elem % 2 == 0;
	};

	// print whether all, any, or none of the elements are/is even
	cout << boolalpha << "all even?:  "
		<< all_of(coll.cbegin(), coll.cend(), isEven) << endl;
	cout << "any even?:  "
		<< any_of(coll.cbegin(), coll.cend(), isEven) << endl;
	cout << "none even?: "
		<< none_of(coll.cbegin(), coll.cend(), isEven) << endl;


}
Beispiel #5
0
struct node *merge(struct node *T, int l, int u)
{
    struct node *N;
    N = (struct node *)malloc(sizeof(struct node));
    N->p = NULL;
    N->l = l;
    N->u = u;
    N->left = N->right = NULL;
    struct list *p = N->p;
    struct node *b, *c, *prev, *prev0;
    prev0 = b = T;
    while(b!=NULL)
    {
        if((l < b->l) && (u >= b->l))
        {
            prev = b;
            c = b->left;
            while(c != NULL)
            {
                if(l > c->u)
                    {
                        prev = c;
                        c = c->right;
                    }
                else if(l < c->l)
                {   
                    struct list *temp = c->p;
                    struct node *del = c;
                    while(temp != NULL)
                    {
                        p = list_insert(p, temp->a);
                        temp = temp->next;
                    }
                    if(c->right != NULL)
                        p = insert_elements(c->right, p);
                    c = c->left;
                    if(del == prev->left)
                        prev->left = c;
                    else
                        prev->right = c;
                    free(del);
                }
                else
                {
                    if(c->right != NULL)
                        p = insert_elements(c->right, p);
                    c->right = NULL;
                    struct list *temp = c->p;
                    struct list *prev1 = c->p;
                    while(temp != NULL && temp->a < l)
                    {
                        prev1 = temp;
                        temp = temp->next;
                    }
                    if(prev1 == c->p)
                        c->p = NULL;
                    else if(prev1 != NULL)
                        prev1->next = NULL;
                    while(temp != NULL)
                    {
                        p = list_insert(p, temp->a);
                        temp = temp->next;
                    }
                    if(c->l == l)
                    {
                        struct node *del = c;
                        c = c->left;
                        if(del != NULL && del == prev->left)
                            prev->left = c;
                        else if(del != NULL && del == prev->right)
                            prev->right = c;
                        free(del);
                    }
                    else
                    {
                        c->u = l-1;
                    }
                    N->left = b->left;
                    break;
                }
            }
            N->left = b->left;
        }
        if((u > b->u) && (l <= b->u))
        {
            prev = b;
            c = b->right;
            while(c != NULL)
            {
                if(u < c->l)
                    {
                        prev = c;
                        c = c->left;
                    }
                else if(u > c->u)
                {
                    struct list *temp = c->p;
                    struct node *del = c;
                    while(temp != NULL)
                    {
                        p = list_insert(p, temp->a);
                        temp = temp->next;
                    }
                    if(c->left != NULL)
                        p = insert_elements(c->left, p);
                    c = c->right;
                    if(del == prev->left)
                        prev->left = c;
                    else
                        prev->right = c;
                    free(del);
                }
                else
                {
                    if(c->left != NULL)
                        p = insert_elements(c->left, p);
                    c->left = NULL;
                    struct list *temp = c->p;
                    struct list *prev1 = temp;
                    while(temp != NULL && temp->a <= u)
                    {
                        p = list_insert(p, temp->a);
                        prev1 = temp;
                        temp = temp->next;
                    }
                    c->p = temp;
                    if(c->u == u)
                    {
                        struct node *del = c;
                        c = c->right;
                        if(del != NULL && del == prev->left)
                            prev->left = c;
                        else if(del != NULL && del == prev->right)
                            prev->right = c;
                        free(del);
                    }
                    else
                    {
                        c->l = u+1;
                    }
                    N->right = b->right;
                    break;
                }
            }
            N->right = b->right;
        }
        struct list *temp = b->p;
        if(l >= b->l && l <= b->u)
        {
            if(l > b->l)
            {
                N->left = (struct node *)malloc(sizeof(struct node));
                N->left->p = NULL;
                N->left->l = b->l;
                N->left->u = l-1;
                while(temp != NULL && temp->a < l)
                {
                    N->left->p = list_insert(N->left->p, temp->a);
                    temp = temp->next;
                }
                N->left->left = b->left;
                N->left->right = NULL;  
            }
            else
                N->left = b->left;
        }
        while(temp !=NULL && temp->a >= l && temp->a <= u)
        {
            p = list_insert(p, temp->a);
            temp = temp->next;
        }
        if(u >= b->l && u <= b->u)
        {
            if(u < b->u)
            {
                N->right = (struct node *)malloc(sizeof(struct node));
                N->right->p = NULL;
                N->right->u = b->u;
                N->right->l = u+1;
                while(temp != NULL)
                {
                    N->right->p = list_insert(N->right->p, temp->a);
                    temp = temp->next;
                }
                N->right->right = b->right;
                N->right->left = NULL;  
            }
            else
                N->right = b->right;
        }
        if(u < b->l)
        {
            prev0 = b;
            b = b->left;
        }
        else if(l > b->u)
        {
            prev0 = b;
            b = b->right;
        }
        else
        {
            if(T == b)
            {
                T = N;
                break;
            }
            else if(b == prev0->left)
                prev0->left = N;
            else if(b == prev0->right)
                prev0->right = N;
            free(b);
            break;
        }
    }
    N->p = p;
    return T;
}