TreeNode* makeBST(ListNode* list, int len){
        if (len == 0){
            return NULL;
        }
        if (len == 1){
            return new TreeNode(list->val);
        }

        int sz = 0;
        auto right = list;

        for (int i = 0; i < len / 2; i++){
            right = right->next;
            sz++;
        }

        TreeNode *ans = new TreeNode(right->val);

        while(right && right->next && right->val == right->next->val){
            right = right->next;
            sz++;
        }

        ans->left = makeBST(list, sz);
        ans->right = makeBST(right->next, len - sz - 1);

        return ans;
    }
struct node *makeBST(int *arr, int i, int j)
{
	if ((i > j)||i<0)return NULL;
	int mid = (i + j) / 2;
	struct node *temp = (struct node*)malloc(sizeof(struct node));
	temp->data = arr[mid];
	temp->right = makeBST(arr, mid + 1, j);
	temp->left = makeBST(arr, i, mid - 1);
	return temp;
}
Exemple #3
0
 void makeBST(TreeNode *&root, vector<int> &num, int left, int right){
     if(left > right){
         root = NULL;
         return ;
     }
     if(left == right){
         root = new TreeNode(num[left]);
         return;
     }
     int mid = left + (right-left)/2;
     root = new TreeNode(num[mid]);
     makeBST(root->left, num, left, mid);
     makeBST(root->right, num, mid+1, right);
 }
 TreeNode *makeBST(vector<int> &num, int start, int end)
 {
     if(start > end)
         return NULL;
     if(start == end)
         return new TreeNode(num[start]);
     else
     {
         int mid = (start + end)/2;
         TreeNode* root = new TreeNode(num[mid]);
         root->left = makeBST(num, start, mid - 1);
         root->right = makeBST(num, mid + 1, end);
         return root;
     }
 }
    TreeNode* makeBST(int l, int r){
        if (l > r){
            return NULL;
        }
        if (l == r){
            return new TreeNode((*vect)[l]);    
        }
        int m = (l + r) / 2;
        TreeNode *cur = new TreeNode((*vect)[m]);
        auto it = upper_bound((*vect).begin(), (*vect).end(), (*vect)[m]);

        cur->left = makeBST(l, it - (*vect).begin() - 2);
        cur->right = makeBST(it - (*vect).begin(), r);
        
        return cur;
    }
Exemple #6
0
int main()
{
	Tree* tree;
	
	printf("välkommen till skagettikåd\n\n");


	printf("No.items, Sekvential, BinaryST, HashTable\n");

	//loop
	for (int numberOfitems = 50000; numberOfitems <= 5000000; numberOfitems = numberOfitems * 10)
	{
		int* arr = (int*)calloc(numberOfitems, sizeof(int));
		FILE* fp;

		fp = fopen("5 000 000 unika slumpade tal.txt", "r");
		for (int i = 0; i < numberOfitems; i++)
		{
			fscanf(fp, "%d", &arr[i]);
		}
		fclose(fp);

		//stuff
		makeHashTable(arr, numberOfitems);
		tree = makeBST(arr, numberOfitems);
		
		//time variables
		double timeSekventiall = 0;
		double timeBST = 0;
		double timeHash = 0;

		//Genomför sköningen 100 gånger
		for (int i = 0; i < 100; i++)
		{
			int searchfor = 1;
			timeSekventiall += sekventiell(arr, searchfor, numberOfitems);
			timeBST += searchBST(tree, searchfor, numberOfitems);
			timeHash += searchHashTable(arr, searchfor, numberOfitems);
		}

		//dela på 100 för att få genomsnitt
		timeSekventiall = timeSekventiall / 100;
		timeBST = timeBST / 100;
		timeHash = timeHash / 100;
		
		//Print it!
		printf("%8d%10Lf%12Lf%10Lf\n", numberOfitems, timeSekventiall, timeBST, timeHash);

		//free
		free(arr);
		emptyTree(tree, tree->root);
	}





	system("pause");
	return 0;
}
    TreeNode* sortedListToBST(ListNode* head) {
        auto tmp = head;
        int len = 0;
        while(tmp){
            tmp = tmp->next;
            len++;
        }

        return makeBST(head, len);
    }
int main()
{
    Node *root = makeBST();
    displayPath(root,25);
    cout << endl;
    displayPath1(root,25);


    return 0;
}
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        vect = &nums;

        return makeBST(0, nums.size() - 1);
    }
struct node *convert_array_to_bst(int *arr, int len){
	if (len <= 0 || arr == NULL)return NULL;
	return makeBST(arr, 0, len-1);
}
 TreeNode *sortedArrayToBST(vector<int> &num) {
     int len = num.size();
     if(len == 0)
         return NULL;
     return makeBST(num, 0, len - 1);
 }
Exemple #12
0
 TreeNode *sortedArrayToBST(vector<int> &num) {
     TreeNode *root;
     if(!num.size()) return NULL;
     makeBST(root, num, 0, num.size()-1);
     return root;
 }
int main(int argc, const char *argv[])
{
    makeBST();
    return 0;
}