Skip to content

Instantly share code, notes, and snippets.

@abdulmoiz2245
Forked from toboqus/btree.cpp
Created January 25, 2021 09:32
Show Gist options
  • Save abdulmoiz2245/03872b835a9d5da4460cf8c378601801 to your computer and use it in GitHub Desktop.
Save abdulmoiz2245/03872b835a9d5da4460cf8c378601801 to your computer and use it in GitHub Desktop.
Binary tree implementation in c++
#include <iostream>
using namespace std;
struct node{
int value;
node *left;
node *right;
};
class btree{
public:
btree();
~btree();
void insert(int key);
node *search(int key);
void destroy_tree();
void inorder_print();
void postorder_print();
void preorder_print();
private:
void destroy_tree(node *leaf);
void insert(int key, node *leaf);
node *search(int key, node *leaf);
void inorder_print(node *leaf);
void postorder_print(node *leaf);
void preorder_print(node *leaf);
node *root;
};
btree::btree(){
root = NULL;
}
btree::~btree(){
destroy_tree();
}
void btree::destroy_tree(node *leaf){
if(leaf != NULL){
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
void btree::insert(int key, node *leaf){
if(key < leaf->value){
if(leaf->left != NULL){
insert(key, leaf->left);
}else{
leaf->left = new node;
leaf->left->value = key;
leaf->left->left = NULL;
leaf->left->right = NULL;
}
}else if(key >= leaf->value){
if(leaf->right != NULL){
insert(key, leaf->right);
}else{
leaf->right = new node;
leaf->right->value = key;
leaf->right->right = NULL;
leaf->right->left = NULL;
}
}
}
void btree::insert(int key){
if(root != NULL){
insert(key, root);
}else{
root = new node;
root->value = key;
root->left = NULL;
root->right = NULL;
}
}
node *btree::search(int key, node *leaf){
if(leaf != NULL){
if(key == leaf->value){
return leaf;
}
if(key < leaf->value){
return search(key, leaf->left);
}else{
return search(key, leaf->right);
}
}else{
return NULL;
}
}
node *btree::search(int key){
return search(key, root);
}
void btree::destroy_tree(){
destroy_tree(root);
}
void btree::inorder_print(){
inorder_print(root);
cout << "\n";
}
void btree::inorder_print(node *leaf){
if(leaf != NULL){
inorder_print(leaf->left);
cout << leaf->value << ",";
inorder_print(leaf->right);
}
}
void btree::postorder_print(){
postorder_print(root);
cout << "\n";
}
void btree::postorder_print(node *leaf){
if(leaf != NULL){
inorder_print(leaf->left);
inorder_print(leaf->right);
cout << leaf->value << ",";
}
}
void btree::preorder_print(){
preorder_print(root);
cout << "\n";
}
void btree::preorder_print(node *leaf){
if(leaf != NULL){
cout << leaf->value << ",";
inorder_print(leaf->left);
inorder_print(leaf->right);
}
}
int main(){
//btree tree;
btree *tree = new btree();
tree->insert(10);
tree->insert(6);
tree->insert(14);
tree->insert(5);
tree->insert(8);
tree->insert(11);
tree->insert(18);
tree->preorder_print();
tree->inorder_print();
tree->postorder_print();
delete tree;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment