[英]Inserting a node into a Binary Tree using Level Order Traversal
我正在嘗試編寫一個函數,該函數將使用級別順序遍歷將元素插入到二叉樹中。 我的代碼遇到的問題是,當我在樹中插入一個新節點后去打印級別順序遍歷時,它會無限循環地打印元素。 數字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;
}
}
}
主要
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;
}
在這條線上
temp -> left = &new_node;
您正在使temp->left
指向局部變量,該局部變量在函數返回后將不再存在。 嘗試訪問它是未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.