Я пытаюсь написать функцию, которая будет вставлять элемент в двоичное дерево, используя обход уровня. Проблема, с которой я сталкиваюсь с моим кодом, заключается в том, что когда я отправляюсь на печать обхода порядка уровня после вставки нового узла в дерево, он печатает элементы в бесконечном цикле. Цифры 1 2 3 4 5 6 7 8 продолжают участвовать в гонках через терминал. Я был бы признателен за любые рекомендации и рекомендации относительно того, как исправить эту ситуацию.Вставка узла в двоичное дерево с использованием обхода порядка порядка
typedef struct BinaryTreeNode {
int data;
BinaryTreeNode * left;
BinaryTreeNode * right;
} BinaryTreeNode;
Это порядок уровень обхода для печати элементы:
void LevelOrder(BinaryTreeNode *root) {
BinaryTreeNode *temp;
std::queue<BinaryTreeNode*> Q {};
if(!root) return;
Q.push(root);
while(!Q.empty()) {
temp = Q.front();
Q.pop();
//process current node
printf("%d ", temp -> data);
if(temp -> left) Q.push(temp -> left);
if(temp -> right) Q.push(temp -> right);
}
}
Это где я вставить элемент в дерево путем изменения порядка уровня техники обхода
void insertElementInBinaryTree(BinaryTreeNode *root, int element) {
BinaryTreeNode new_node = {element, NULL, NULL};
BinaryTreeNode *temp;
std::queue<BinaryTreeNode*> Q {};
if(!root) {
root = &new_node;
return;
}
Q.push(root);
while(!Q.empty()) {
temp = Q.front();
Q.pop();
//process current node
if(temp -> left) Q.push(temp -> left);
else {
temp -> left = &new_node;
Q.pop();
return;
}
if(temp -> right) Q.push(temp -> right);
else {
temp -> right = &new_node;
Q.pop();
return;
}
}
}
MAIN
int main() {
BinaryTreeNode one = {1, NULL, NULL}; // root of the binary tree
BinaryTreeNode two = {2, NULL, NULL};
BinaryTreeNode three = {3, NULL, NULL};
BinaryTreeNode four = {4, NULL, NULL};
BinaryTreeNode five = {5, NULL, NULL};
BinaryTreeNode six = {6, NULL, NULL};
BinaryTreeNode seven = {7, NULL, NULL};
one.left = &two;
one.right = &three;
two.left = &four;
two.right = &five;
three.left = &six;
three.right = &seven;
insertElementInBinaryTree(&one, 8);
LevelOrder(&one);
printf("\n");
return 0;
}
Так что я должен отправлять в узел, который нужно добавить вместо создания узла локально? –
@MutatingAlgorithm: Это было бы разумно. –
Просто любопытно, как я мог заставить его работать, просто отправив фактический элемент (число) вместо создания узла в главном. –