예제 #1
0
 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;
     }
 }
예제 #2
0
파일: main.c 프로젝트: hudecek/algorithmsHW
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);
}
예제 #3
0
 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;
 }