通过结构实施BST

时间:2017-01-24 18:44:07

标签: c++ linked-list binary-search-tree

我尝试按如下方式实施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);

   }

但如果我尝试将下一个节点的数据打印到头部,则显示错误。

提前致谢

1 个答案:

答案 0 :(得分:0)

您正在设置ptr = nodes,但实际上您应该将父级leftright设置为nodes。将ptr设置为nodes不会更改父级的leftright指针。

做类似的事情:

{
    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;
        }
    }
}

注意:上述代码未经过测试,但描述的方法。