Бесконечная рекурсия функции Print

Имеется стандартная структура TreeNode, как в задачах на Leetcode, и следующий класс:

class BinaryTree {
private:
    TreeNode* root;
public:
    BinaryTree() : root(nullptr) {}
    BinaryTree(TreeNode* first) : root(first) {}

    void insert(int data) {
        if (root == nullptr) {
        root = new TreeNode;
        root->val = data;
    }
        else {
            TreeNode* curr = root;
            while (true) {
                if (data < curr->val) {
                    if (curr->left == nullptr) {
                        curr->left = new TreeNode;
                        curr->left->val = data;
                        break;
                    }
                    else curr = curr->left;
                }
                else if (curr->val < data) {
                    if (curr->right == nullptr) {
                        curr->right = new TreeNode;
                        curr->right->val = data;
                        break;
                    }
                    else curr = curr->right;
                }
                else break;
            }
        }
    }
    
    void Print(TreeNode* head) {
        while (head != nullptr) {
            Print(head->left);
            std::cout << head->val << std::endl; 
            Print(head->right);
        }
    }

    TreeNode* GetRoot() {
        return this->root;
    }
};

Функция insert работает нормально, в отладчике проверял наличие данных, Print должна выводить данные по порядку, а выводит только нули и не выходит из цикла. В main функции дерево объявил так:

TreeNode head(5);
BinaryTree root(&head); 

for (int i = 0; i < 10; ++i){
    root.insert(rand() % 100);
}

root.Print(root.GetRoot());  

Почему функция Print не выводит данные как задумано?


Ответы (0 шт):