1
所以我寫了這個代碼插入節點BST(二進制搜索樹),但程序總是打印樹是空的。我想我的功能調用有問題。你能解釋一下這個問題嗎?此代碼用於BST插入有什麼問題?
#include <bits/stdc++.h>
#include <conio.h>
using namespace std;
struct node
{
int key;
node* left;
node* right;
};
void insert(node* root, int item)
{
if(root == NULL)
{
node* temp = new node();
temp->key = item;
temp->left = NULL;
temp->right = NULL;
root = temp;
}
else
{
if((root->key)>item)
{
insert(root->left,item);
}
else
{
insert(root->right,item);
}
}
}
void inorder(node* root)
{
if(root!=NULL)
{
inorder(root->left);
cout<<" "<<root->key<<" ";
inorder(root->right);
}
else cout<<"The tree is empty.";
}
int main()
{
// cout<<endl<<" Here 5 ";
node* root = NULL;
int flag = 1 , item;
while(flag == 1)
{
cout<<"Enter the number you want to enter : ";
cin>>item;
// cout<<endl<<" Here 6";
insert(root, item);
cout<<"Do you want to enter another number (1 -> YES)?";
cin>>flag;
}
cout<<"The final tree is :";
inorder(root);
getch();
return 0;
}
你有未初始化的指針'node * root;'。除非您爲其賦值,否則它不會設置爲NULL。 –
我將它改爲NULL。仍然有一個問題,輸出始終是:「樹是空的,」 –
接下來的問題是,您通過'node'指針傳遞給'insert'。這意味着對指針的任何更改都是該函數的本地操作,並且不會影響'main'中的指針。 –