diff --git a/data_structures/binary_search_tree.cpp b/data_structures/binary_search_tree.cpp index 1f637904282..a318e55430b 100644 --- a/data_structures/binary_search_tree.cpp +++ b/data_structures/binary_search_tree.cpp @@ -35,12 +35,10 @@ struct node { * \param[in] root root node of a tree * \param[in] x a node with value to be insert */ -void Insert(std::shared_ptr& root, int x) { - if (root == nullptr) { - root = std::make_shared(); - root->val = x; - root->left = nullptr; - root->right = nullptr; +void Insert(node* root, int x) { + if (root == NULL) { + std::cout << " \n invalid root node = " << root << std::endl; + std::cout << " \n please call Insert() with valid root node!!! \n"; return; } @@ -51,7 +49,7 @@ void Insert(std::shared_ptr& root, int x) { root->left->left = nullptr; root->left->right = nullptr; } else { - Insert(root->left, x); + Insert(root->left.get(), x); } } else { if (root->right == nullptr) { @@ -60,7 +58,7 @@ void Insert(std::shared_ptr& root, int x) { root->right->left = nullptr; root->right->right = nullptr; } else { - Insert(root->right, x); + Insert(root->right.get(), x); } } } @@ -203,12 +201,12 @@ void test_tree() { root->left = nullptr; root->right = nullptr; // test Insert() - data_structure::BST::Insert(root, 2); - data_structure::BST::Insert(root, 1); - data_structure::BST::Insert(root, 3); - data_structure::BST::Insert(root, 6); - data_structure::BST::Insert(root, 5); - data_structure::BST::Insert(root, 7); + data_structure::BST::Insert(root.get(), 2); + data_structure::BST::Insert(root.get(), 1); + data_structure::BST::Insert(root.get(), 3); + data_structure::BST::Insert(root.get(), 6); + data_structure::BST::Insert(root.get(), 5); + data_structure::BST::Insert(root.get(), 7); std::cout << "after Insert() ,the expected output should be : 1, 2, 3, 4, 5, 6 ,7" << std::endl; @@ -240,7 +238,13 @@ int main() { test_tree(); int value = 0; int ch = 0; - std::shared_ptr root = nullptr; + std::shared_ptr root( + new data_structure::BST::node); + std::cout << "\nEnter the value of root node :"; + std::cin >> value; + root->val = value; + root->left = nullptr; + root->right = nullptr; do { std::cout << "\n1. Insert" @@ -258,7 +262,14 @@ int main() { case 1: std::cout << "\nEnter the value to be Inserted : "; std::cin >> x; - data_structure::BST::Insert(root, x); + if (root.get()) + data_structure::BST::Insert(root.get(), x); + else { + root = std::make_shared(); + root->val = x; + root->left = nullptr; + root->right = nullptr; + } break; case 2: std::cout << "\nEnter the value to be Deleted : ";