Бинарное дерево поиска Реализация.

голоса
0

Я пытался реализовать бинарное дерево поиска, но я думаю, что я сделал ошибку в моей функции вставки. Вот мой код

#include<iostream>
#include<memory.h>
#include <cstddef>
using namespace std;
struct bst_node
{
    int info;
    struct bst_node *left_node_ptr;
    struct bst_node *right_node_ptr;
};

struct bst_node* getnode(int x)
{

    struct bst_node* ret= new bst_node;
    ret->info=x;
    ret->left_node_ptr=NULL;
    ret->right_node_ptr=NULL;
    return ret;
}

void insert(struct bst_node **root, int var_info)
{
    struct bst_node *temp=(*root); // Links the temporary pointer to root of the BST
    while(temp!=NULL)              // Loop till I find a suitable position for inserting
    {
        if(temp->info > var_info)
        {
            temp=temp->left_node_ptr;
        }
        else
        {
            temp=temp->right_node_ptr;
        }

    }
    temp= getnode(var_info);
    return ;
}

/* Recursive In order Traversal */
void inorder_recursive( struct bst_node * L)
{
    if(L!= NULL)
    {
        inorder_recursive(L->left_node_ptr);
        cout<<L->info<<endl;
        inorder_recursive(L->right_node_ptr);
    }
    return;
}
int main()
{
    struct bst_node* my_root= getnode(5);
    insert(&my_root, 6);
    insert(&my_root, 3);
    /*
    int x=1;
    int arr[]= {};
    while(x)
    {
        cin>>x;
        insert(&my_root, x);
    }*/
    inorder_recursive(my_root);
    return 0;
}
Задан 31/03/2011 в 11:33
источник пользователем
На других языках...                            


2 ответов

голоса
2

Вы никогда не установить left_node_ptrили right_node_ptrзначение ваших узлов. Ваша функция вставки бежит вниз по дереву найти правильное место , чтобы поместить новый узел, затем выделяет узел - но на самом деле не присоединять новый узел слева или справа от родителя вы нашли.

Ответил 31/03/2011 в 11:39
источник пользователем

голоса
1

Поиск идет на 1 уровень слишком далеко. Вы выбросили узел, на который вы хотите прикрепить новый ребенок. Кроме того, температура = ... не будет ничего дерева прикрепиться. Вы должны сделать некоторое время, пока вы не найдете дочерний узел, который вы хотите прикрепить к, а затем сделать что-либо:

TEMP-> left_node_ptr = getnode (var_info); или TEMP-> right_node_ptr = getnode (var_info);

   while(temp!=NULL)              // Loop till I find a suitable position for inserting
        {
            if(temp->info > var_info)
            {
                temp=temp->left_node_ptr;
            }
            else
            {
                temp=temp->right_node_ptr;
            }

        }
        temp= getnode(var_info);
Ответил 31/03/2011 в 11:39
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more