когда я пытаюсь вызвать функцию вставки в основном это не принимать цифры? - PullRequest
0 голосов
/ 20 октября 2018
eleman* insert( eleman* agac, int eklenecekDeger)
{
// ağacımız tamamen boş ise
if (agac == NULL)
{
    // kökümüzü oluşturuyoruz
    eleman* kok = (eleman*)malloc(sizeof(eleman));

    // kökümüzün sağı ve solunu boş olacakları için NULL yapıyoruz
    kok->right = NULL;
    kok->left = NULL;

    // eklenecek değerimizi ekliyoruz
    kok->key = eklenecekDeger;
    cout << eklenecekDeger<<endl;
    // ve yeni kök değerimizi geriye döndürüyoruz
    return kok;
}

// eklenecek değer kökten büyükse sağ alt ağaca geçip
// fonksiyonumuzu orada tekrar işliyoruz (özyineleme)
if (agac->key < eklenecekDeger)
{
    agac->right = insert(agac->right, eklenecekDeger);
}
else // değer kökten küçükse sol alt ağaca geçiyoruz
{
    agac->left = insert(agac->left, eklenecekDeger);
}
cout << "eklenen eleman" ;
// ağacımızın son halini geriye döndürüyoruz
return agac;
}

Эта функция предназначена для вставки нового номера в двоичное дерево. Но когда я вызываю его в main, как это

int dizi[MAXSIZE];
    for (int i = mystack.top; i >= 0; i--) {
        //dizi[i] = pop();
        //insert(agac, dizi[i]);
        insert(agac, pop());
        inorder(agac);
    }

, это не работает. Эта программа будет принимать числа из стекаи положить их в двоичное дерево.

1 Ответ

0 голосов
/ 20 октября 2018

Ваша функция работает правильно.

Как можно заметить, вставка возвращает новую головку.И в тесте Вы его не храните!

Это должно выглядеть так:

for (int i = mystack.top; i >= 0; i--) {
    //dizi[i] = pop();
    //insert(agac, dizi[i]);
    agac = insert(agac, pop());
    inorder(agac);
}

В C ++ * следует использовать 1008 * вместо malloc.

Если это C ++ 11, то функция должна использовать nullptr вместо NULL.Как это:

if (agac == nullptr)
{
    eleman* kok = new eleman;

    kok->right = nullptr;
    kok->left  = nullptr;

    kok->key = eklenecekDeger;
    cout << eklenecekDeger << endl;

    return kok;
}
...