我编写了一个二进制树代码,用于在非递归方法中将元素插入其中。代码未按预期工作。无论我调试代码多少次,似乎都没有错,但我得到了错误的结果。我希望你们能帮忙。提前谢谢。
void insert(int element){
if(root == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq));
node->ele = element;
node->left = NULL;
node->right = NULL;
root = node;
cout << root->ele << "\n";
}
else{
struct elemq *ref;
ref = root;
while(ref != NULL){
if(element <= ref->ele){
if(ref->left == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq ));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->left = node;
break;
}
else{
ref = ref->left;
}
}
else if(element > ref->ele){
if(ref->right == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq ));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->right = node;
break;
}
else{
ref = ref->right;
}
}
}
}
}
每当我尝试插入元素时,每个元素都被视为root
,而不仅仅是第一次。因此,每次条件if(root == NULL)
为true
。我将root
声明为全局变量,并将其初始化为NULL
中的main()
。我通过将cout <<
放在第一个if()
条件下来了解这一点。我将之前的帖子修改为这个新问题。
答案 0 :(得分:2)
node = ref->left;
你想要
ref->left = node;
和ref-&gt;类似
答案 1 :(得分:1)
我认为您错误地设置了要添加到引用的节点,而不是设置对要添加的节点的左右引用。
将node = ref->left
更改为ref->left = node
,同样将其更改为右侧。