int searchBTree(bTree* root, int data) { if (root->num != data) { if (root->num > data) { if (root->leftnode == NULL) return -1; return searchBTree(root->leftnode, data); } else if (root->num < data) { if (root->rightnode == NULL) return -1; return searchBTree(root->rightnode, data); } } else if (root->num == data) { return root->index; } }
void testSearch() { printf("###########################\n"); printf("Test 4. search: "); BTree *tree = testTree1(); Node *node = searchBTree(tree, 16); if ((node == NULL) || (!inKeys(16, node))) { printf("NOK - chybne hledani klice 16, ktery je v koreni B-stromu\n"); }else{ node = searchBTree(tree, 24); if (node != NULL){ printf("NOK - chybne hledani klice, ktery se v B-strome nenachazi\n"); }else{ freeTree(tree); tree = testTree2(); node = searchBTree(tree, 15); if ((node == NULL) || (!inKeys(15, node))){ printf("NOK - chybne hledani klice 15, ktery je v listu\n"); }else{ node = searchBTree(tree, 50); if ((node == NULL) || (!inKeys(50, node))){ printf("NOK - chybne hledani klice 50, ktery je ve vnitrnim uzlu\n"); }else{ node = searchBTree(tree, 19); if (node != NULL){ printf("NOK - chybne hledani klice, ktery se v B-strome nenachazi\n"); }else{ printf("OK\n") ; } } } } } makeGraph(tree, "search.dot"); printf("Vykresleny B-strom najdete v souboru search.dot\n"); freeTree(tree); }
vector<int> twoSum(vector<int>& nums, int target) { vector<int> solution; vector<int> largerThanHalfTargetID; int start = 0; bTree *solTree; while (nums[start] > target/2) { start++; } solTree = new bTree(nums[start], start); for (int i = 0; i < nums.size(); i++) { if (nums[i] <= target/2) { addNode(solTree, nums[i], i); } if (nums[i] >= target/2) { largerThanHalfTargetID.push_back(i); } } /*cout << largerThanHalfTargetID.size() << endl; for (int i = 0; i < largerThanHalfTargetID.size(); i++) { cout << largerThanHalfTargetID[i] << endl; }*/ for (int i = 0; i < largerThanHalfTargetID.size(); i++) { int result = searchBTree(solTree, target-nums[largerThanHalfTargetID[i]]); if (result != -1) { if (result < largerThanHalfTargetID[i] + 1) { solution.push_back(result); solution.push_back(largerThanHalfTargetID[i] + 1); return solution; } else if (result > largerThanHalfTargetID[i] + 1) { solution.push_back(largerThanHalfTargetID[i] + 1); solution.push_back(result); return solution; } } } return solution; }