Бесконечная рекурсия функции 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 не выводит данные как задумано?