単純な二分探索木クラス(BST)を書き込もうとしています。
単一のノード(例:value = 10)を追加すると、ルートが更新され、BST :: insert(...)の最後にVSC++デバッガーを使用して検証しました。
次に、ノード(値-10)を表示しようとしましたが(Caseステートメント3)、何も出力されません。その理由は、getRoot()が呼び出されたときに、ルートがNULL(?? !!!)であるためです。
誰かがこの問題のデバッグを手伝ってくれませんか。
#include <iostream>
#include <stdio.h>
#include "bst_node.h"
class BST{
private:
bst_node *root;
public:
bst_node* getRoot();
void insert(bst_node *, int val);
void deleteValue(int val);
void display(bst_node *);
void destroy();
BST()
{
root = NULL;
std::cout<<"BST constructor"<<"\n";
}
~BST()
{
std::cout<<"BST destructor"<<"\n";
}
};
int main()
{
int item;
int choice;
BST tree1;
while(1)
{
printf("\n Choices are:\n");
printf("\n 1.Insertbeg\n\n 2.deleteNode\n\n 3.display\n\n 4.exit\n\n");
printf(" Enter U'r choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("Enter element to be inserted: ");
scanf("%d",&item);
tree1.insert(tree1.getRoot(), item);
break;
}
case 2:
{
printf("Enter element to be deleted: ");
scanf("%d",&item);
// tree1.deleteValue(item);
break;
}
case 3:
{
tree1.display(tree1.getRoot());
break;
}
case 4:
exit(1);
break;
default: printf("INVALID CHOICE TRY AGAIN\n");
}
}
}
void BST::insert(bst_node* root, int val)
{
if( root == NULL)
{
// add first element
bst_node *new_node = bst_node::create_empty_node();
new_node->val = val;
root = new_node;
}
else if(val < root->val )
{
insert(root->l_child, val);
}
else if (val >= root->val)
{
insert(root->r_child, val);
}
}
void BST::display(bst_node *root)
{
if(root == NULL)
{
return;
}
else
{
std::cout << root->val <<"\n";
display(root->l_child);
display(root->r_child);
}
}
void BST::deleteValue(int val)
{
std::cout<< " Do nothing";
}
bst_node* BST::getRoot()
{
return root;
}
bst_node.h
class bst_node
{
public:
int val;
bst_node *l_child;
bst_node *r_child;
static bst_node* create_empty_node();
};
bst_node* bst_node::create_empty_node()
{
bst_node *new_node;
new_node = new bst_node;
new_node -> l_child = new_node -> r_child = NULL;
return(new_node);
}