почему этот код не вставляет узлы в двоичное дерево поиска

0

Что-то не так в модуле вставки. Это не добавление нового узла в дерево. Я использую pass-by-ref.

    #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct tNode
{
    int data;
    tNode* left;
    tNode* right;
};

tNode* newNode (int data)
{
    tNode* temp = new tNode;
    temp->data = data;
    temp->left = NULL;
    temp->right = NULL;
    return temp;
}

void insert (tNode*& root, int value)
{
    if (!root)
    {
        root = newNode (value);
    }
    else
    {
        if ( value > root->data )
            insert (root->right, value);
        else
            insert (root->left , value);
    }
}

void storeInorder (vector<int>& v, tNode* t)
{
    if (!t)
    {
        storeInorder (v, t->left);
        v.push_back(t->data);
        storeInorder (v, t->right);
    }
}

void printInOrder (tNode* t)
{
    if (!t)
    {
        printInOrder (t->left);
        cout << t->data << " ";
        printInOrder (t->right);
    }

}
int main() 
{

    vector <int> v = {10, 23, 41, 12, 55, 34, 17, 40, 19,3};
    tNode* bst = NULL;
    for (int i=0; i<v.size(); ++i)
    {
        insert (bst, v[i]);
    }

    printInOrder (bst);


    v.clear();
    storeInorder (v, bst);

    cout << v.size();

    for (int i=0; i<v.size(); ++i)
    {
        cout <<  v[i] << " ";
    }

    if (is_sorted (v.begin(), v.end()))
        cout << "everything fine";
    return 0;
}
Теги:
binary-search-tree

2 ответа

2
Лучший ответ

В функции printInOrder есть ошибка. Когда t не равно null, напечатайте его. Так что это должно быть

if (t)

не

if (!t)
2

Нет проблем в insert(). Проблема возникает из printInOrder() с неправильными условиями проверки, которые должны быть:

void printInOrder(tNode *t)
{
    if (t)
    {
        printInOrder(t->left);
        cout << t->data <<" ";
        printInOrder(t->right);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню