Двоичное дерево C ++ - PullRequest
       17

Двоичное дерево C ++

0 голосов
/ 16 марта 2019

Итак, я работал над программой Binary tree и у меня возникли проблемы при создании метода print (void) для печати всех полей в дереве.Любая помощь и совет будут великолепны!У меня есть метод add, который берет точку данных и добавляет ее к позиции счетчика в массиве, а затем увеличивает счет.

#include <iostream>
#include<iomanip>
using namespace std;

class bin_tree_node
{
private:
    int myArray[100];
    int count;
public:
    bin_tree_node()
    {
        count = 0;
    }

    void add(int num)
    {
        myArray[count] = num;
        count++;
    };

    int returnFirstItemInArray()
    {
        return myArray[0];
    }

    void preorder(int i)
    {
        cout << myArray[i] << endl;

        int leftChildIndex = 2 * i + 1;
        int rightChildIndex = 2 * i + 2;

        if (leftChildIndex < count)
        {
            preorder(leftChildIndex);
            if (rightChildIndex < count)
            preorder(rightChildIndex);
        }
    }

};

int main()
{
    bin_tree_node *myBinTreePtr = new bin_tree_node();
    int inputNum;

    do
    {
        cout << "Enter a number into the tree, enter -1 to quit: ";
        cin >> inputNum;

        if (inputNum == -1)
        {
            break;
        }
        myBinTreePtr->add(inputNum);
    } while (inputNum != -1);

    myBinTreePtr->preorder(0);
    return 0;
} 

1 Ответ

0 голосов
/ 17 марта 2019

У меня проблемы с созданием метода печати (void) для печати всех поля в дереве.

Я нашел и адаптировал следующее (я думаю, из rosettacode.org/wiki/AVL_tree). С тех пор это мой любимый.

void showNodeAtLvl(int lvl) { 
    std::cout << std::setw(lvl) << m_key << std::endl; }


template <class T>
void BBT::AVLtree<T>::showTallTree(AVLnode<T>* n, int lvl)
{
   if (nullptr != n)
   {
      showTallTree(n->m_left, lvl+1);
      n->showNodeAtLvl(7*lvl);
      showTallTree(n->m_right, lvl+1);
   }
}

Мой фрагмент использует указатели на левый и правый узлы, и вам нужно будет заменить указатели на вашу схему индексации массива (когда вы это выясните)


Пример теста и вывода:

Inserting values 11 to 41


tree.showTallTree: 
                                 11
                          12
                                 13
                   14
                                 15
                          16
                                 17
            18
                                 19
                          20
                                 21
                   22
                                 23
                          24
                                 25
     26
                                 27
                          28
                                 29
                   30
                                 31
                          32
                                 33
            34
                                 35
                          36
                                 37
                   38
                                 39
                          40
                                 41

Примечание. Середина примера и корень дерева имеют значение 26 слева. Листья деревьев справа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...