无法在c ++中创建二进制搜索树

时间:2014-09-06 14:34:57

标签: c++ data-structures binary-search-tree

我的InsertInTree功能无法正常工作,我无法弄清楚我的问题。请提出我可以做的更改(但我不想使用递归)。

它从结构中获取值,函数GetNewNode返回带有左右指针的节点NULL

public:

void InsertInTree(int piData) 
{
    Node*newNode = NULL;
    newNode=GetNewNode(piData);
    if(root==NULL)
    {
        root=newNode;
        return;
    }

    Node*temp = root;

    while(temp!=NULL)
    {
        if(newNode->data<=temp->data)
        {
            temp=temp->left;
        }
        else
        {
            temp=temp->right;
        }

    }

    temp=newNode;
    return;
}
bool SearchNum(int piSearch)
{

    if(root==NULL)
    {
        return false;
    }

    Node*temp=root;
    while(temp!=NULL)
    {
        if(temp->data==piSearch)
        {
            return true;
        }
        else if(piSearch<=temp->data)
        {
            temp=temp->left;
        }
        else
        {
            temp=temp->right;
        }

    }
    if(temp==NULL)
    {
        return false;
    }
    else
    {
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

以下内容应解决您的问题:

void InsertInTree(int piData) 
{
    Node* newNode = GetNewNode(piData);
    Node** temp = &root;

    while (*temp != NULL)
    {
        if (newNode->data <= (*temp)->data)
        {
            temp = &(*temp)->left;
        }
        else
        {
            temp = &(*temp)->right;
        }
    }
    *temp = newNode;
}

答案 1 :(得分:0)

假设root是全局的。你应该再使用一个节点,即* pre(previousnode)。

*pre=NULL; 

while(temp!=NULL){
   if(newnode->data<=temp->data){
     pre=temp;  
     temp=temp->left;
}else{
     pre=temp;
     temp=temp->right;
  }
}

if(newnode->data<=pre->data)
pre->left=newnode;
else
pre->right=newnode;

这将解决问题..