使用级别顺序遍历将节点插入二叉树
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
指向一个局部变量,该变量在函数返回后将不再存在。任何访问它的尝试都是未定义的行为。
相关文章:
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 将二叉树的节点插入链表 (C++)
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)
- 单个链表,节点插入最低到最高节点值的问题
- 无法将节点插入C 中的链接列表中
- 将节点插入链表只会转到开头或结尾
- 将节点插入 BST
- 按排序顺序将节点插入链表
- LinkedList节点插入
- 二进制搜索树节点插入
- 使用级别顺序遍历将节点插入二叉树
- 尝试将节点插入链表中,但我需要一个重载运算符<函数
- 将节点插入二叉搜索树
- 尝试将节点插入矢量<node>,但程序在push_back时不断崩溃
- 将节点插入二进制搜索树/链表
- 将节点插入到不带头指针的排序列表中
- 错误:SList.cpp:(.text+0x69):尝试将节点插入链表头C++时未定义对"SLNode::SLNode()"的引用
- 为什么在尝试将新节点插入列表时出错
- 节点插入二进制树C++
- 为什么我不能将 head 之后的节点插入C++链表?