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

◆ 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};
507  std::vector<int> actual = tree.get_elements_inorder();
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};
528  std::vector<int> actual = tree.get_elements_preorder();
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: