Finished benchmark and plotting
This commit is contained in:
+30
-3
@@ -24,10 +24,37 @@ Tree *search(Tree *root, int value) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void freeTree(Tree *root) {
|
||||
void traverseInOrder(Tree *root, std::vector<int> *vec) {
|
||||
if (root != nullptr) {
|
||||
freeTree(root->left);
|
||||
freeTree(root->right);
|
||||
traverseInOrder(root->left, vec);
|
||||
vec->push_back(root->info);
|
||||
traverseInOrder(root->right, vec);
|
||||
}
|
||||
}
|
||||
|
||||
Tree *rebuild(std::vector<int> *vec, int start, int end) {
|
||||
if (start > end)
|
||||
return nullptr;
|
||||
|
||||
int mid = (start + end) / 2;
|
||||
Tree *node = new Tree();
|
||||
node->info = vec->at(mid);
|
||||
node->left = rebuild(vec, start, mid - 1);
|
||||
node->right = rebuild(vec, mid + 1, end);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
Tree *balance(Tree *root) {
|
||||
std::vector<int> vec;
|
||||
traverseInOrder(root, &vec);
|
||||
return rebuild(&vec, 0, vec.size() - 1);
|
||||
}
|
||||
|
||||
void deleteTree(Tree *root) {
|
||||
if (root != nullptr) {
|
||||
deleteTree(root->left);
|
||||
deleteTree(root->right);
|
||||
delete root;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user