Метод вставки двоичного дерева C ++ - PullRequest
0 голосов
/ 07 мая 2020
struct node {
    person * data;
    node * left, * right;

    node(person * p) {
        data = p; left = NULL; right = NULL;
    }
};

class tree {
    protected:
        node * root;
    public:
        tree() {
            root = NULL;
        }

        tree(person * p) {
            root = new node(p);
        }

        void insert(person * p) {
            if(root == NULL) {
                root = new node(p);
                return;
            }
            node * curr = root;
            while(true) {
                if(p->last < curr->data->last) {
                    if(curr->left == NULL) {
                        curr->left = new node(p);
                        return;
                    }
                    curr = curr->left;
                } else {
                    if(curr->right == NULL) {
                        curr->right = new node(p);
                        return;
                    }
                    curr = curr->right;
                }
            }
        }

        void insert(node * & n, person * p) {
            if(n == NULL) {
                n = new node(p);
                return;
            }
            if(p->last < n->data->last)
                insert(n->left, p);
            else
                insert(n->right, p);            
        }

        void insert(person * p) {
            insert(root, p);
        }
        void print(node * n) {
            if(n == NULL)
                return;
            print(n->left);
            cout << n->data->ss << " " << n->data->bday << " "<< n->data->first << ", " << n->data->last << " " << n->data->zip << "\n";
            print(n->right);
        }

        void print() {
            print(root);
        }
};

Я просмотрел другие реализации BST-вставок, и мой logi c следует другим потокам, которые я видел. Root установлен в NULL в конструкторе. Когда я использую свою функцию печати, она выводит случайные значения, а не информацию, которая хранится с типом человека. В моем коде есть два метода вставки, которые я пробовал. Я также включил свои функции печати на случай, если что-то не так. Распечатка, которую я получаю из своей функции печати, почти кажется отображающей адрес памяти содержимого, но некоторая информация отсутствует. Я не знаю, куда go отсюда.

1 Ответ

0 голосов
/ 07 мая 2020

Я обнаружил, в чем проблема. В своей личной структуре я называл параметры конструктора так же, как переменные в структуре. Видимо С ++ не любит, когда это делается. Изменение имен параметров конструктора на другое устранило проблему.

Старый:

person(int ssn, int bday, string first, string last, int zip) {
        ssn = ssn; bday = bday; first = first; last = llast; zip = zip; 
    }

Новый:

person(int s, int b, string f, string l, int z) {
        ssn = s; bday = b; first = f; last = l; zip = z; 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...