Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
binary_search_tree2.cpp File Reference

A generic binary search tree implementation. More...

#include <cassert>
#include <functional>
#include <iostream>
#include <memory>
#include <vector>
Include dependency graph for binary_search_tree2.cpp:

Classes

class  binary_search_tree< T >
 The Binary Search Tree class. More...
 
struct  binary_search_tree< T >::bst_node
 A struct to represent a node in the Binary Search Tree. More...
 

Functions

static void test_insert ()
 Function for testing insert(). More...
 
static void test_remove ()
 Function for testing remove(). More...
 
static void test_contains ()
 Function for testing contains(). More...
 
static void test_find_min ()
 Function for testing find_min(). More...
 
static void test_find_max ()
 Function for testing find_max(). More...
 
static void test_get_elements_inorder ()
 Function for testing get_elements_inorder(). More...
 
static void test_get_elements_preorder ()
 Function for testing get_elements_preorder(). More...
 
static void test_get_elements_postorder ()
 Function for testing get_elements_postorder(). More...
 
int main ()
 

Detailed Description

A generic binary search tree implementation.

See also
binary_search_tree.cpp

Function Documentation

◆ main()

int main ( void  )
555 {
556 test_insert();
557 test_remove();
564}
static void test_get_elements_inorder()
Function for testing get_elements_inorder().
Definition: binary_search_tree2.cpp:497
static void test_contains()
Function for testing contains().
Definition: binary_search_tree2.cpp:428
static void test_insert()
Function for testing insert().
Definition: binary_search_tree2.cpp:357
static void test_get_elements_postorder()
Function for testing get_elements_postorder().
Definition: binary_search_tree2.cpp:539
static void test_find_max()
Function for testing find_max().
Definition: binary_search_tree2.cpp:474
static void test_get_elements_preorder()
Function for testing get_elements_preorder().
Definition: binary_search_tree2.cpp:518
static void test_remove()
Function for testing remove().
Definition: binary_search_tree2.cpp:391
static void test_find_min()
Function for testing find_min().
Definition: binary_search_tree2.cpp:451

◆ test_contains()

static void test_contains ( )
static

Function for testing contains().

Returns
void
428 {
429 std::cout << "Testing BST contains...";
430
432 tree.insert(5);
433 tree.insert(4);
434 tree.insert(3);
435 tree.insert(6);
436
437 assert(tree.contains(5));
438 assert(tree.contains(4));
439 assert(tree.contains(3));
440 assert(tree.contains(6));
441 assert(!tree.contains(999));
442
443 std::cout << "ok" << std::endl;
444}
The Binary Search Tree class.
Definition: binary_search_tree2.cpp:19
bool insert(std::unique_ptr< bst_node > &node, T new_value)
Recursive function to insert a value into the BST.
Definition: binary_search_tree2.cpp:89
bool contains(std::unique_ptr< bst_node > &node, T value)
Recursive function to check if a value is in the BST.
Definition: binary_search_tree2.cpp:176
T endl(T... args)
Here is the call graph for this function:

◆ test_find_max()

static void test_find_max ( )
static

Function for testing find_max().

Returns
void
474 {
475 std::cout << "Testing BST find_max...";
476
477 int max = 0;
479 assert(!tree.find_max(max));
480
481 tree.insert(5);
482 tree.insert(4);
483 tree.insert(3);
484 tree.insert(6);
485
486 assert(tree.find_max(max));
487 assert(max == 6);
488
489 std::cout << "ok" << std::endl;
490}
bool find_max(std::unique_ptr< bst_node > &node, T &ret_value)
Recursive function to find the maximum value in the BST.
Definition: binary_search_tree2.cpp:52
T max(T... args)
Here is the call graph for this function:

◆ test_find_min()

static void test_find_min ( )
static

Function for testing find_min().

Returns
void
451 {
452 std::cout << "Testing BST find_min...";
453
454 int min = 0;
456 assert(!tree.find_min(min));
457
458 tree.insert(5);
459 tree.insert(4);
460 tree.insert(3);
461 tree.insert(6);
462
463 assert(tree.find_min(min));
464 assert(min == 3);
465
466 std::cout << "ok" << std::endl;
467}
bool find_min(std::unique_ptr< bst_node > &node, T &ret_value)
Recursive function to find the minimum value in the BST.
Definition: binary_search_tree2.cpp:70
T min(T... args)
Here is the call graph for this function:

◆ test_get_elements_inorder()

static void test_get_elements_inorder ( )
static

Function for testing get_elements_inorder().

Returns
void
497 {
498 std::cout << "Testing BST get_elements_inorder...";
499
501 tree.insert(5);
502 tree.insert(4);
503 tree.insert(3);
504 tree.insert(6);
505
506 std::vector<int> expected = {3, 4, 5, 6};
508 assert(actual == expected);
509
510 std::cout << "ok" << std::endl;
511}
std::vector< T > get_elements_inorder()
Get all values of the BST in in-order order.
Definition: binary_search_tree2.cpp:320
Here is the call graph for this function:

◆ test_get_elements_postorder()

static void test_get_elements_postorder ( )
static

Function for testing get_elements_postorder().

Returns
void
539 {
540 std::cout << "Testing BST get_elements_postorder...";
541
543 tree.insert(5);
544 tree.insert(4);
545 tree.insert(3);
546 tree.insert(6);
547
548 std::vector<int> expected = {3, 4, 6, 5};
550 assert(actual == expected);
551
552 std::cout << "ok" << std::endl;
553}
std::vector< T > get_elements_postorder()
Get all values of the BST in post-order order.
Definition: binary_search_tree2.cpp:344
Here is the call graph for this function:

◆ test_get_elements_preorder()

static void test_get_elements_preorder ( )
static

Function for testing get_elements_preorder().

Returns
void
518 {
519 std::cout << "Testing BST get_elements_preorder...";
520
522 tree.insert(5);
523 tree.insert(4);
524 tree.insert(3);
525 tree.insert(6);
526
527 std::vector<int> expected = {5, 4, 3, 6};
529 assert(actual == expected);
530
531 std::cout << "ok" << std::endl;
532}
std::vector< T > get_elements_preorder()
Get all values of the BST in pre-order order.
Definition: binary_search_tree2.cpp:332
Here is the call graph for this function:

◆ test_insert()

static void test_insert ( )
static

Function for testing insert().

Returns
void
357 {
358 std::cout << "Testing BST insert...";
359
361 bool res = tree.insert(5);
362 int min = -1, max = -1;
363 assert(res);
364 assert(tree.find_max(max));
365 assert(tree.find_min(min));
366 assert(max == 5);
367 assert(min == 5);
368 assert(tree.size() == 1);
369
370 tree.insert(4);
371 tree.insert(3);
372 tree.insert(6);
373 assert(tree.find_max(max));
374 assert(tree.find_min(min));
375 assert(max == 6);
376 assert(min == 3);
377 assert(tree.size() == 4);
378
379 bool fail_res = tree.insert(4);
380 assert(!fail_res);
381 assert(tree.size() == 4);
382
383 std::cout << "ok" << std::endl;
384}
std::size_t size()
Get the number of values in the BST.
Definition: binary_search_tree2.cpp:313
Here is the call graph for this function:

◆ test_remove()

static void test_remove ( )
static

Function for testing remove().

Returns
void
391 {
392 std::cout << "Testing BST remove...";
393
395 tree.insert(5);
396 tree.insert(4);
397 tree.insert(3);
398 tree.insert(6);
399
400 bool res = tree.remove(5);
401 int min = -1, max = -1;
402 assert(res);
403 assert(tree.find_max(max));
404 assert(tree.find_min(min));
405 assert(max == 6);
406 assert(min == 3);
407 assert(tree.size() == 3);
408 assert(tree.contains(5) == false);
409
410 tree.remove(4);
411 tree.remove(3);
412 tree.remove(6);
413 assert(tree.size() == 0);
414 assert(tree.contains(6) == false);
415
416 bool fail_res = tree.remove(5);
417 assert(!fail_res);
418 assert(tree.size() == 0);
419
420 std::cout << "ok" << std::endl;
421}
bool remove(std::unique_ptr< bst_node > &parent, std::unique_ptr< bst_node > &node, T rm_value)
Recursive function to remove a value from the BST.
Definition: binary_search_tree2.cpp:124
Here is the call graph for this function: