我尝试按如下方式实施BST .Created结构为NODE.it,左右两个指针,一个整数值(数据)。
#include<iostream>
#include<stdio.h>
using namespace std;
struct node
{
struct node*left;
struct node*right;
int data;
};
node* head1;
int bol=0;
void insert1(int x)
{
node* nodes=new node;
nodes->left=NULL;
nodes->right=NULL;
nodes->data=x;
if(bol==0)
{
head1=nodes;
bol=1;
}
else
{
node* ptr=head1;
while(ptr!=NULL)
{
if(x<=ptr->data)
{
ptr=ptr->left;
}
else
{
ptr=ptr->right;
}
}
ptr=nodes;
}
}
int main()
{
int n,m;
cout<<"Enter the size of first BST"<<endl;
cin>>n;
int arrayfirst[n];
for(int i=0;i<n;i++)
{
cin>>arrayfirst[i];
insert1(arrayfirst[i]);
}
cout<<head1->data<<endl;
cout<<head1->left->data<<endl;
//printPreorder(head1);
}
但如果我尝试将下一个节点的数据打印到头部,则显示错误。
提前致谢
答案 0 :(得分:0)
您正在设置ptr = nodes
,但实际上您应该将父级left
或right
设置为nodes
。将ptr
设置为nodes
不会更改父级的left
或right
指针。
做类似的事情:
{
node* ptr=head1;
node *parent = NULL;
while(ptr != NULL) {
parent = ptr;
if(x <= ptr->data) {
ptr = ptr->left;
}
else {
ptr = ptr->right;
}
}
if (parent != NULL) { // this should always be true
if (parent->left == ptr) {
parent->left = nodes;
} else {
parent->right = nodes;
}
}
}
注意:上述代码未经过测试,但描述的方法。