diff --git a/pliki_do_zadan_BST/BST/BST/BST.cpp b/pliki_do_zadan_BST/BST/BST/BST.cpp index 3f759fd..6f8bc46 100644 --- a/pliki_do_zadan_BST/BST/BST/BST.cpp +++ b/pliki_do_zadan_BST/BST/BST/BST.cpp @@ -5,6 +5,7 @@ using namespace std; BST::BST():root(NULL) {} BST::BST(int tab[], int size) { + root = NULL; // 5 linijka nie chce sie u mnie wykonac z jakiegos powodu, dlatego dorzucam to for (int i = 0; i < size; i++) insert(root, tab[i]); } @@ -26,21 +27,81 @@ bool BST::insert(BSTNode*& node, int wartosc) { return false; } -//BSTNode* BST::search(int key) {} +BSTNode* BST::search(int key) { + return search(root, key); +} -//BSTNode* BST::search(BSTNode* node, int key) {} +BSTNode* BST::search(BSTNode* node, int key) { + BSTNode* p = NULL; -//int BST::minKey() {} + BSTNode* tmp = node; + while(tmp != NULL) { + if(tmp->data == key) { + p = tmp; + break; + } else { + if(tmp->data > key) tmp = tmp->left; + else tmp = tmp->right; + } + } -//int BST::minKey(BSTNode* node) {} + return p; +} -//int BST::maxKey() {} +int BST::minKey() { + return minKey(root); +} -//void BST::inorder(BSTNode* x) {} +int BST::minKey(BSTNode* node) { + BSTNode* tmp = node; -//void BST::preorder(BSTNode* x) {} + int minn = tmp->data; -//void BST::postorder(BSTNode* x) {} + while(tmp != NULL) { + if(tmp->left != NULL) { + tmp = tmp->left; + minn = tmp->data; + } else { + break; + } + } + + return minn; +} + +int BST::maxKey() { + int maxx = BST::root->data; + + BSTNode* tmp = BST::root; + while(tmp != NULL) { + if(tmp->right != NULL) { + tmp = tmp->right; + maxx = tmp->data; + } else { + break; + } + } + + return maxx; +} + +void BST::inorder(BSTNode* x) { + if(x->left != NULL) inorder(x->left); + cout << x->data << " "; + if(x->right != NULL) inorder(x->right); +} + +void BST::preorder(BSTNode* x) { + cout << x->data << " "; + if(x->left != NULL) preorder(x->left); + if(x->right != NULL) preorder(x->right); +} + +void BST::postorder(BSTNode* x) { + if(x->left != NULL) postorder(x->left); + if(x->right != NULL) postorder(x->right); + cout << x->data << " "; +} void BST::print(BSTNode* x){ if (!x->left && !x->right) return; diff --git a/pliki_do_zadan_BST/BST/BST/main.cpp b/pliki_do_zadan_BST/BST/BST/main.cpp index 122356b..90d1c0c 100644 --- a/pliki_do_zadan_BST/BST/BST/main.cpp +++ b/pliki_do_zadan_BST/BST/BST/main.cpp @@ -5,7 +5,18 @@ using namespace std; int main() { int dane[]{ 8, 3, 6, 1, 7, 10, 0, 2, 11, 4, 9 }; //{ 10,6,15,1,8,12,16,0,2,7,9 }; - BST drzewo(dane, size(dane)); + BST drzewo(dane, sizeof(dane) / sizeof(int)); // size() wywalalo mi blad deklaracji, zastapilem to czyms takim, "That works too." + + cout << "Search for 10: " << drzewo.search(10) << endl; + cout << "Search for 42: " << drzewo.search(42) << endl; + + cout << "Min: " << drzewo.minKey() << endl; + cout << "Max: " << drzewo.maxKey() << endl; + + cout << "Inorder: "; drzewo.inorder(drzewo.root); cout << endl; + cout << "Preorder: "; drzewo.preorder(drzewo.root); cout << endl; + cout << "Postorder: "; drzewo.postorder(drzewo.root); cout << endl; + drzewo.print(drzewo.root); cout << endl;