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

A simple tree implementation using nodes. More...

#include <algorithm>
#include <iostream>
#include <queue>
Include dependency graph for avltree.cpp:

Classes

class  node< Kind >
 

Typedefs

typedef struct node node
 

Functions

nodecreateNode (int data)
 
int height (node *root)
 
int getBalance (node *root)
 
noderightRotate (node *root)
 
nodeleftRotate (node *root)
 
nodeminValue (node *root)
 
nodeinsert (node *root, int item)
 
nodedeleteNode (node *root, int key)
 
void levelOrder (node *root)
 
int main ()
 

Detailed Description

A simple tree implementation using nodes.

Todo:
update code to use C++ STL library features and OO structure
Warning
This program is a poor implementation and does not utilize any of the C++ STL features.

Function Documentation

◆ createNode()

node* createNode ( int  data)

Create and return a new Node

21  {
22  node *nn = new node();
23  nn->data = data;
24  nn->height = 0;
25  nn->left = NULL;
26  nn->right = NULL;
27  return nn;
28 }

◆ deleteNode()

node* deleteNode ( node root,
int  key 
)

Balanced Deletion

88  {
89  if (root == NULL)
90  return root;
91  if (key < root->data)
92  root->left = deleteNode(root->left, key);
93  else if (key > root->data)
94  root->right = deleteNode(root->right, key);
95 
96  else {
97  // Node to be deleted is leaf node or have only one Child
98  if (!root->right) {
99  node *temp = root->left;
100  delete (root);
101  root = NULL;
102  return temp;
103  } else if (!root->left) {
104  node *temp = root->right;
105  delete (root);
106  root = NULL;
107  return temp;
108  }
109  // Node to be deleted have both left and right subtrees
110  node *temp = minValue(root->right);
111  root->data = temp->data;
112  root->right = deleteNode(root->right, temp->data);
113  }
114  // Balancing Tree after deletion
115  return root;
116 }

◆ getBalance()

int getBalance ( node root)

Returns difference between height of left and right subtree

38 { return height(root->left) - height(root->right); }

◆ height()

int height ( node root)

Returns height of tree

31  {
32  if (root == NULL)
33  return 0;
34  return 1 + std::max(height(root->left), height(root->right));
35 }

◆ insert()

node* insert ( node root,
int  item 
)

Balanced Insertion

66  {
67  node *nn = createNode(item);
68  if (root == NULL)
69  return nn;
70  if (item < root->data)
71  root->left = insert(root->left, item);
72  else
73  root->right = insert(root->right, item);
74  int b = getBalance(root);
75  if (b > 1) {
76  if (getBalance(root->left) < 0)
77  root->left = leftRotate(root->left); // Left-Right Case
78  return rightRotate(root); // Left-Left Case
79  } else if (b < -1) {
80  if (getBalance(root->right) > 0)
81  root->right = rightRotate(root->right); // Right-Left Case
82  return leftRotate(root); // Right-Right Case
83  }
84  return root;
85 }

◆ leftRotate()

node* leftRotate ( node root)

Returns Node after Left Rotation

50  {
51  node *t = root->right;
52  node *u = t->left;
53  t->left = root;
54  root->right = u;
55  return t;
56 }

◆ levelOrder()

void levelOrder ( node root)

LevelOrder (Breadth First Search)

119  {
121  q.push(root);
122  while (!q.empty()) {
123  root = q.front();
124  std::cout << root->data << " ";
125  q.pop();
126  if (root->left)
127  q.push(root->left);
128  if (root->right)
129  q.push(root->right);
130  }
131 }

◆ main()

int main ( )

Main function

134  {
135  // Testing AVL Tree
136  node *root = NULL;
137  int i;
138  for (i = 1; i <= 7; i++) root = insert(root, i);
139  std::cout << "LevelOrder: ";
140  levelOrder(root);
141  root = deleteNode(root, 1); // Deleting key with value 1
142  std::cout << "\nLevelOrder: ";
143  levelOrder(root);
144  root = deleteNode(root, 4); // Deletin key with value 4
145  std::cout << "\nLevelOrder: ";
146  levelOrder(root);
147  return 0;
148 }

◆ minValue()

node* minValue ( node root)

Returns node with minimum value in the tree

59  {
60  if (root->left == NULL)
61  return root;
62  return minValue(root->left);
63 }

◆ rightRotate()

node* rightRotate ( node root)

Returns Node after Right Rotation

41  {
42  node *t = root->left;
43  node *u = t->right;
44  t->right = root;
45  root->left = u;
46  return t;
47 }
mov
void mov(tower *From, tower *To)
Definition: tower_of_hanoi.cpp:39
std::srand
T srand(T... args)
main
int main()
Definition: knuth_morris_pratt.cpp:76
main
int main()
Definition: fenwick_tree.cpp:69
ternary_search
void ternary_search(int N, int A[], int target)
Definition: ternary_search.cpp:127
std::floor
T floor(T... args)
test3
void test3()
Definition: smallest_circle.cpp:188
main
int main(void)
Definition: decimal_to_hexadecimal.cpp:11
method2
void method2(int number)
Definition: decimal_to_binary.cpp:27
main
int main()
Definition: exponential_search.cpp:74
main
int main()
Definition: stairs_pattern.cpp:17
hash_search
int hash_search(int key, int *counter)
Definition: hash_search.cpp:76
std::string
STL class.
sorting::shell_sort
void shell_sort(T *arr, size_t LEN)
Definition: shell_sort2.cpp:45
tolowerRoman
std::string tolowerRoman(int n)
Definition: decimal_to_roman_numeral.cpp:24
test_f
void test_f(const int NUM_DATA)
Definition: shell_sort2.cpp:145
string_search
String search algorithms.
Definition: brute_force_string_searching.cpp:13
MAX
#define MAX
Definition: fibonacci_fast.cpp:27
show_data
void show_data(T *arr, size_t LEN)
Definition: shell_sort2.cpp:18
std::list
STL class.
heapSort
void heapSort(T *arr, int n)
Definition: heap_sort.cpp:84
std::clock_t
std::move
T move(T... args)
main
int main()
Definition: binomial_dist.cpp:84
addition_rule_dependent
double addition_rule_dependent(double A, double B, double B_given_A)
Definition: addition_rule.cpp:25
test2
void test2()
Definition: smallest_circle.cpp:173
std::pair
std::vector
STL class.
deleteNode
node * deleteNode(node *root, int key)
Definition: avltree.cpp:88
std::vector::size
T size(T... args)
Point::x
double x
Definition: smallest_circle.cpp:16
main
int main()
Definition: decimal_to_roman_numeral.cpp:90
FenwickTree::sum_range
int sum_range(int l, int r)
Definition: fenwick_tree.cpp:65
test
void test()
Definition: heap_sort.cpp:99
absolutePrecision
#define absolutePrecision
Definition: ternary_search.cpp:22
ans
ll ans(ll n)
Definition: matrix_exponentiation.cpp:94
FenwickTree
Definition: fenwick_tree.cpp:17
print
void print(uint32_t N)
Definition: sieve_of_eratosthenes.cpp:40
HASHMAX
#define HASHMAX
Determines the length of the hash table.
Definition: hash_search.cpp:22
PRIME
#define PRIME
Prime modulus for hash functions.
Definition: rabin_karp.cpp:16
sorting::partition
int partition(int arr[], int low, int high)
Definition: quick_sort.cpp:37
std::distance
T distance(T... args)
binary_s
Type * binary_s(Type *array, size_t size, Type key)
Definition: exponential_search.cpp:34
node
Definition: avltree.cpp:13
Point::y
double y
Definition: smallest_circle.cpp:17
std::search
T search(T... args)
node
struct list node
FindNextGap
int FindNextGap(int gap)
Definition: comb_sort.cpp:29
MAX
#define MAX
Determines how much data.
Definition: hash_search.cpp:21
main
int main()
Definition: pascal_triangle.cpp:52
main
int main()
Definition: bayes_theorem.cpp:26
std::scanf
T scanf(T... args)
multiply
vector< vector< ll > > multiply(const vector< vector< ll >> &A, const vector< vector< ll >> &B)
Definition: matrix_exponentiation.cpp:60
std::reverse
T reverse(T... args)
main
int main(void)
Definition: qr_decomposition.cpp:23
main
int main()
Definition: palindrome_of_number.cpp:19
sorting
Sorting algorithms.
Definition: non_recursive_merge_sort.cpp:11
levelOrder
void levelOrder(node *root)
Definition: avltree.cpp:119
main
int main()
Definition: vector_important_functions.cpp:11
std::queue
STL class.
sorting::merge
void merge(Iterator, Iterator, const Iterator, char[])
merges 2 sorted adjacent segments into a larger sorted segment
Definition: non_recursive_merge_sort.cpp:57
main
int main()
Definition: linear_search.cpp:27
eqd
static float eqd(float y)
Definition: successive_approximation.cpp:17
std::sort
T sort(T... args)
fill
std::string fill(char c, int n)
Definition: decimal_to_roman_numeral.cpp:15
mat_mul
void mat_mul(const std::valarray< std::valarray< double >> &A, const std::valarray< std::valarray< double >> &B, std::valarray< std::valarray< double >> *OUT)
Definition: qr_eigen_values.cpp:54
string_search::create_hash
int64_t create_hash(const std::string &s, int n)
Definition: rabin_karp.cpp:25
std::sqrt
T sqrt(T... args)
stack_idx
int stack_idx
pointer to track stack index
Definition: paranthesis_matching.cpp:23
main
int main(int argc, char *argv[])
Definition: shell_sort2.cpp:183
main
int main()
Definition: interpolation_search2.cpp:32
compare
int compare(const void *a, const void *b)
Definition: shell_sort2.cpp:87
string_search::brute_force
int brute_force(const std::string &text, const std::string &pattern)
Definition: brute_force_string_searching.cpp:21
main
int main()
Definition: buzz_number.cpp:9
std::is_sorted
T is_sorted(T... args)
qr_algorithm
Functions to compute QR decomposition of any rectangular matrix.
FenwickTree::offset
int offset(int x)
Definition: fenwick_tree.cpp:22
create_matrix
void create_matrix(std::valarray< std::valarray< double >> *A)
Definition: qr_eigen_values.cpp:28
main
int main()
Definition: happy_number.cpp:29
query
Definition: mo.cpp:6
main
int main()
Definition: text_search.cpp:15
show
void show(int *arr, int size)
Definition: merge_sort.cpp:96
test_set
const std::vector< std::vector< std::string > > test_set
Definition: brute_force_string_searching.cpp:41
rec_ternary_search
int rec_ternary_search(int left, int right, int A[], int target)
Definition: ternary_search.cpp:90
Node
Definition: linkedlist_implentation_usingarray.cpp:14
std::vector::push_back
T push_back(T... args)
Point::y
int y
Point respect to x coordinate.
Definition: line_segment_intersection.cpp:14
qr_algorithm::eigen_values
std::valarray< double > eigen_values(std::valarray< std::valarray< double >> *A, bool print_intermediates=false)
Definition: qr_eigen_values.cpp:98
std::clock
T clock(T... args)
string_search::recalculate_hash
int64_t recalculate_hash(const std::string &s, int old_index, int new_index, int64_t old_hash, int patLength)
Definition: rabin_karp.cpp:42
main
int main()
Definition: smallest_circle.cpp:198
test_int
void test_int(const int NUM_DATA)
Definition: shell_sort2.cpp:105
createNode
node * createNode(int data)
Definition: avltree.cpp:21
pascal_triangle
int ** pascal_triangle(int **arr, int n)
Definition: pascal_triangle.cpp:36
CombSort
void CombSort(int *arr, int l, int r)
Definition: comb_sort.cpp:42
insert
node * insert(node *root, int item)
Definition: avltree.cpp:66
std::printf
T printf(T... args)
FenwickTree::FenwickTree
FenwickTree(const std::vector< int > &arr)
Definition: fenwick_tree.cpp:28
mergeSort
void mergeSort(int *arr, int l, int r)
Definition: merge_sort.cpp:83
main
int main()
Definition: matrix_exponentiation.cpp:129
main
int main()
Definition: fast_interger_input.cpp:39
std::cout
qr_decompose.h
Library functions to compute QR decomposition of a given matrix.
merge
void merge(int *arr, int l, int m, int r)
Definition: merge_sort.cpp:33
h
int h(int key)
Definition: hash_search.cpp:45
sorting::non_recursive_merge_sort
void non_recursive_merge_sort(const Iterator first, const Iterator last)
bottom-up merge sort which sorts elements in a non-decreasing order
Definition: non_recursive_merge_sort.cpp:86
FenwickTree::update
void update(int id, int val)
Definition: fenwick_tree.cpp:45
main
int main(int argc, char const *argv[])
Definition: binary_search.cpp:31
k
ll k
Definition: matrix_exponentiation.cpp:48
tower
Definition: tower_of_hanoi.cpp:11
_target
#define _target
Definition: ternary_search.cpp:27
binary_search
int binary_search(int a[], int r, int key)
Definition: binary_search.cpp:15
opening
char opening(char ch)
Definition: paranthesis_matching.cpp:36
is_happy
bool is_happy(T n)
Definition: happy_number.cpp:14
string_search::check_if_equal
bool check_if_equal(const std::string &str1, const std::string &str2, int start1, int end1, int start2, int end2)
Definition: rabin_karp.cpp:60
main
int main()
Definition: median_search.cpp:38
main
int main()
Definition: ternary_search.cpp:134
binomial_range_successes
double binomial_range_successes(double n, double p, double lower_bound, double upper_bound)
Definition: binomial_dist.cpp:74
LenghtLine
double LenghtLine(const Point &A, const Point &B)
Definition: smallest_circle.cpp:37
std::qsort
T qsort(T... args)
std::to_string
T to_string(T... args)
string_search::kmp
bool kmp(const std::string &pattern, const std::string &text)
Definition: knuth_morris_pratt.cpp:56
poisson_range_successes
double poisson_range_successes(double expected, double lower, double upper)
Definition: poisson_dist.cpp:54
main
int main()
Definition: tower_of_hanoi.cpp:65
sorting::non_recursive_merge_sort
void non_recursive_merge_sort(const Iterator first, const Iterator last, const size_t n)
bottom-up merge sort which sorts elements in a non-decreasing order
Definition: non_recursive_merge_sort.cpp:25
ll
#define ll
Definition: matrix_exponentiation.cpp:33
std::valarray
STL class.
binomial_standard_deviation
double binomial_standard_deviation(double n, double p)
Definition: binomial_dist.cpp:36
height
int height(node *root)
Definition: avltree.cpp:31
TriangleArea
double TriangleArea(const Point &A, const Point &B, const Point &C)
Definition: smallest_circle.cpp:54
main
int main()
Definition: brute_force_string_searching.cpp:47
rightRotate
node * rightRotate(node *root)
Definition: avltree.cpp:41
binomial_x_successes
double binomial_x_successes(double n, double p, double x)
Definition: binomial_dist.cpp:65
test2
void test2()
Definition: qr_eigen_values.cpp:210
std::remove
T remove(T... args)
endl
#define endl
Definition: matrix_exponentiation.cpp:36
link
struct list * link
pointer to nodes
comp
void comp(X x, std::vector< int > *s1, std::vector< int > *s2, std::vector< int > *s3)
Definition: median_search.cpp:17
spiralPrint
void spiralPrint(int **a, int r, int c)
Definition: spiral_print.cpp:29
bayes_BgivenA
double bayes_BgivenA(double AgivenB, double A, double B)
Definition: bayes_theorem.cpp:20
poisson_rate
double poisson_rate(double events, double timeframe)
Definition: poisson_dist.cpp:17
list::key
int key
key value for node
Definition: hash_search.cpp:30
main
int main(int argc, char **argv)
Definition: qr_eigen_values.cpp:243
std::ceil
T ceil(T... args)
circle
double circle(const std::vector< Point > &P)
Definition: smallest_circle.cpp:87
eq
static float eq(float y)
Definition: successive_approximation.cpp:12
struzik_search
Type * struzik_search(Type *array, size_t size, Type key)
Definition: exponential_search.cpp:59
main
int main()
Definition: poisson_dist.cpp:65
a
vector< ll > a
Definition: matrix_exponentiation.cpp:53
std::rand
T rand(T... args)
std::swap
T swap(T... args)
std::min
T min(T... args)
binomial_expected
double binomial_expected(double n, double p)
Definition: binomial_dist.cpp:22
main
int main()
Definition: heap_sort.cpp:120
hashtab
node hashtab[HASHMAX]
array of nodes
Definition: hash_search.cpp:35
std::string::substr
T substr(T... args)
it_ternary_search
int it_ternary_search(int left, int right, int A[], int target)
Definition: ternary_search.cpp:48
jumpSearch
int jumpSearch(int arr[], int x, int n)
Definition: jump_search.cpp:12
data
int data[MAX]
test data
Definition: hash_search.cpp:24
method1
void method1(int number)
Definition: decimal_to_binary.cpp:11
test1
void test1()
Definition: qr_eigen_values.cpp:177
minValue
node * minValue(node *root)
Definition: avltree.cpp:59
printArray
void printArray(T *arr, int sz)
Definition: heap_sort.cpp:37
std::lower_bound
T lower_bound(T... args)
main
int main()
Definition: hash_search.cpp:99
std::endl
T endl(T... args)
std::left
T left(T... args)
create_list
void create_list(int key)
Definition: hash_search.cpp:55
fact
double fact(double x)
Definition: poisson_dist.cpp:30
std::exp
T exp(T... args)
std::string::begin
T begin(T... args)
std::getline
T getline(T... args)
std
STL namespace.
addition_rule_independent
double addition_rule_independent(double A, double B)
Definition: addition_rule.cpp:14
show
void show(const struct tower *const F, const struct tower *const T, const struct tower *const U)
Definition: tower_of_hanoi.cpp:19
main
int main()
Definition: sparse_matrix.cpp:9
test
void test()
Definition: smallest_circle.cpp:158
compare
Definition: huffman.cpp:28
main
int main()
Definition: spiral_print.cpp:69
main
int main()
Definition: avltree.cpp:134
MAX
#define MAX
Definition: paranthesis_matching.cpp:16
stack
Definition: stack.h:26
power
vector< vector< ll > > power(const vector< vector< ll >> &A, ll p)
Definition: matrix_exponentiation.cpp:79
main
int main()
Definition: successive_approximation.cpp:20
std::count
T count(T... args)
LinearSearch
int LinearSearch(int *array, int size, int key)
Definition: linear_search.cpp:16
std::vector::assign
T assign(T... args)
IsPrime
bool IsPrime(int number)
Definition: primality_test.cpp:18
nCr
double nCr(double n, double r)
Definition: binomial_dist.cpp:47
tower::values
int values[10]
Values in the tower.
Definition: tower_of_hanoi.cpp:13
qr_algorithm::qr_decompose
void qr_decompose(const std::valarray< std::valarray< T >> &A, std::valarray< std::valarray< T >> *Q, std::valarray< std::valarray< T >> *R)
Definition: qr_decompose.h:146
genArray
void genArray(int **a, int r, int c)
Definition: spiral_print.cpp:12
main
int main()
Definition: comb_sort.cpp:88
main
int main()
Definition: interpolation_search.cpp:37
add
std::string add(std::string a, std::string b)
Definition: string_fibonacci.cpp:24
std::time
T time(T... args)
main
int main()
Definition: addition_rule.cpp:30
toupperRoman
std::string toupperRoman(int n)
Definition: decimal_to_roman_numeral.cpp:58
LIMS
#define LIMS
Definition: qr_eigen_values.cpp:20
std::string::end
T end(T... args)
bayes_AgivenB
double bayes_AgivenB(double BgivenA, double A, double B)
Definition: bayes_theorem.cpp:14
FenwickTree::sum
int sum(int id)
Definition: fenwick_tree.cpp:54
std::setw
T setw(T... args)
main
int main()
Definition: quick_sort.cpp:82
std::max
T max(T... args)
FenwickTree::FenwickTree
FenwickTree(int x)
Definition: fenwick_tree.cpp:39
Point::Point
Point(double a=0.f, double b=0.f)
Definition: smallest_circle.cpp:23
main
int main()
Definition: primality_test.cpp:31
leftRotate
node * leftRotate(node *root)
Definition: avltree.cpp:50
list::next
struct list * next
pointer to next link in the chain
Definition: hash_search.cpp:31
tower::top
int top
top tower ID
Definition: tower_of_hanoi.cpp:15
Point
Definition: line_segment_intersection.cpp:12
TH
void TH(int n, tower *From, tower *Using, tower *To)
Definition: tower_of_hanoi.cpp:52
interpolation_search
int interpolation_search(int arr[], int value, int len)
Definition: interpolation_search.cpp:15
push
void push(char ch)
push byte to stack variable
Definition: paranthesis_matching.cpp:26
main
int main()
Definition: merge_sort.cpp:102
pop
char pop()
pop a byte out of stack variable
Definition: paranthesis_matching.cpp:29
InterpolationSearch
int InterpolationSearch(int A[], int n, int x)
Definition: interpolation_search2.cpp:15
std::cin
poisson_expected
double poisson_expected(double rate, double time)
Definition: poisson_dist.cpp:25
poisson_x_successes
double poisson_x_successes(double expected, double x)
Definition: poisson_dist.cpp:46
main
int main(void)
Definition: rabin_karp.cpp:105
sorting::quickSort
void quickSort(int arr[], int low, int high)
Definition: quick_sort.cpp:63
std::numeric_limits
std::vector::data
T data(T... args)
string_search::getFailureArray
std::vector< int > getFailureArray(const std::string &pattern)
Definition: knuth_morris_pratt.cpp:33
show_pascal
void show_pascal(int **arr, int n)
Definition: pascal_triangle.cpp:18
string_search::rabin_karp
int rabin_karp(const std::string &str, const std::string &pat)
Definition: rabin_karp.cpp:83
get_input
void get_input()
Definition: ternary_search.cpp:36
PointInCircle
bool PointInCircle(const std::vector< Point > &P, const Point &Center, double R)
Definition: smallest_circle.cpp:72
std::getchar
T getchar(T... args)
tests
void tests()
Definition: comb_sort.cpp:73
list
Definition: list_array.cpp:8
std::memset
T memset(T... args)
getBalance
int getBalance(node *root)
Definition: avltree.cpp:38
binomial_variance
double binomial_variance(double n, double p)
Definition: binomial_dist.cpp:29
std::next
T next(T... args)
ab
ll ab(ll x)
Definition: matrix_exponentiation.cpp:43
sorting::shell_sort
void shell_sort(std::vector< T > *arr)
Definition: shell_sort2.cpp:75
fastinput
void fastinput(int *number)
Definition: fast_interger_input.cpp:11
std::pow
T pow(T... args)