class node{
public:
int data;
node *left;
node *right;
};
class BFStree{
public:
void insert(int key);
void deleteNode(int key);
void inorderTraversal(node *temp);
void inorder();
node *root;
BFStree(){
root = NULL;
}
};
void BFStree::insert(int key){
node *temp = root;
while(temp!=NULL){
if(key>temp->data){
temp = temp->right;
}
else if(key<temp->data){
temp = temp->left;
}
else{
cout << "NOT ALLOWED TO HAVE SAME DATA" << temp->data << " " << key << endl;
}
}
node *temp2 = new node;
temp2->data = key;
cout << key << " inserted" << endl;
temp2->left = NULL;
temp2->right = NULL;
temp = temp2;
}
int main(){
BFStree t;
t.insert(7);
t.insert(3);
t.insert(21);
}
我正在尝试使用上述功能将数据插入到bst树中,但是即使根为NULL也不起作用
但是当我使用以下功能时,工作就完成了。我不明白我在两个代码中所做的不同。我是编程新手,所以我有如此严重的疑问。请帮我清除它。
void BFStree::insert(int key){
node *temp = root;
if(temp==NULL){
temp = new node;
temp->data = key;
temp->left = NULL;
temp->right = NULL;
root = temp;
return;
}
while(1){
if(key>temp->data){
if(temp->right==NULL){
node *temp2 = new node;
temp2->data = key;
temp2->left = NULL;
temp2->right = NULL;
temp->right = temp2;
break;
}
else{
temp = temp->right;
}
}
else if(key<temp->data){
if(temp->left==NULL){
node *temp2 = new node;
temp2->data = key;
temp2->left = NULL;
temp2->right = NULL;
temp->left = temp2;
break;
}
else{
temp = temp->left;
}
}
}
}
最佳答案
第一个函数的主要问题是,您只需要遍历树,直到找到一个null,然后将该null值分配给temp。
之后,您将创建一个新节点并为temp分配新节点的引用。但是您的临时节点未连接到树。临时节点与其树的父节点或根节点之间没有连接。
而在第二个示例中:
if(temp->right==NULL){
node *temp2 = new node;
temp2->data = key;
temp2->left = NULL;
temp2->right = NULL;
temp->right = temp2;
break;
}
这是关键,您可以将新创建的节点的引用存储在其父节点的右或左子节点中。
关于c++ - 该函数不向我的bst树添加任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50738972/