-
-
Save toboqus/def6a6915e4abd66e922 to your computer and use it in GitHub Desktop.
#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; | |
} |
great work. It was really helpful. Thank you so much.
Why do postorder_print and preorder_print call inorder_print? All should call recursively themselves.
You, the pre and post traversals are WRONG ! copy pasted -(^_^)-
could someone explain how this works because it is understandable but having some comments makes everyone can understand how this code works
could someone explain how this works because it is understandable but having some comments makes everyone can understand how this code works
What exactly is it that you don't understand?
Thank you very much. It is easy to understand.
good work .its really helpful.
Why every function is defined twice. I didn't understand
Like this
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 << ",";
}
}
every function is defined twicw. Any specific reason????????????
Like this
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 << ",";
}
}every function is defined twicw. Any specific reason????????????
As you can see the first one is a public function, the second one is a private function. Usually you let users call the public functions which in turn call private functions that have access to private members and data. You can think of the public functions as an interface. For 'private' use this isn't necessary.
See Encapsulation (computer programming)
why you didn't used search function??
Why did u even made them if u didn't wanted to use it??
how to do this for while taking user inputs?
good work .its really helpful.
it is a binary search tree actually,, not binary tree. becoz in a binary tree there is n need to comapre a key while insertion.
you have mistakes in "print" functions, you use always inorder traversal, but you have to use recursion in that function.
In this function:
void btree::inorder_print(node leaf){
if(leaf != NULL){
inorder_print(leaf->left);
cout << leaf->value << ",";
inorder_print(leaf->right);
}
}
void btree::postorder_print(node leaf){
if(leaf != NULL){
inorder_print(leaf->left);
inorder_print(leaf->right);
cout << leaf->value << ",";
}
}
void btree::preorder_print(node leaf){
if(leaf != NULL){
cout << leaf->value << ",";
inorder_print(leaf->left);
inorder_print(leaf->right);
}
} You use always inorder_print, but you should use themselfs, like this :
void inorder_print(Node leaf)
{
if (leaf != NULL)
{
inorder_print(leaf->left);
cout << leaf->data << ", ";
inorder_print(leaf->right);
}
}
void postorder_print(Node leaf)
{
if (leaf != NULL)
{
postorder_print(leaf->left);
postorder_print(leaf->right);
cout << leaf->data << ", ";
}
}
void preorder_print(Node leaf)
{
if (leaf != NULL)
{
cout << leaf->data << ", ";
preorder_print(leaf->left);
preorder_print(leaf->right);
}
}
This function will order rules of tree traversals. Am I right?
why you didn't used search function??
Why did u even made them if u didn't wanted to use it??
Aise hi sexy lag raha tha!!!
Man there is a big mistake in your code. Here:
void btree::preorder_print(node *leaf){
if(leaf != NULL){
cout << leaf->value << ",";
inorder_print(leaf->left);
inorder_print(leaf->right);
}
}
You use "inorder_print" inside "preorder_print". Rightly:
void btree::preorder_print(node *leaf){
if(leaf != NULL){
cout << leaf->value << ",";
preorder_print(leaf->left);
preorder_print(leaf->right);
}
}
The same within "postorder_print". Correct please.
Man there is a big mistake in your code. Here: void btree::preorder_print(node *leaf){ if(leaf != NULL){ cout << leaf->value << ","; inorder_print(leaf->left); inorder_print(leaf->right); } }
You use "inorder_print" inside "preorder_print". Rightly: void btree::preorder_print(node *leaf){ if(leaf != NULL){ cout << leaf->value << ","; preorder_print(leaf->left); preorder_print(leaf->right); } }
The same within "postorder_print". Correct please.
Please use markdown, especially for code blocks. Makes it easier to read.
I guess you could write something like this in main function
btree myTree;
int x;
cin >> x;
myTree.insert(x);
of course you may consider going through loop, making input more beautiful etc.