gpt4 book ai didi

c++ - 二叉搜索树不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:12 26 4
gpt4 key购买 nike

我在构建二叉树时遇到了一个非常令人困惑的问题。显然这应该是一项简单的任务,但不知何故我可能会弄乱其中的指针。

这里是简化代码(当然不是真正的代码):

#include <string.h>
#include <iostream>

using namespace std;

#define DIM1 2

typedef enum {LEFT,RIGHT} direction;
typedef char tName[MAX_NAME_LEN + 1];

struct Rectangle {
tName _name;
struct Rectangle *_binSon[DIM1];
};

struct Rectangle *recTree;

void insertRectToTree(char str[]){
struct Rectangle rect;
struct Rectangle *point;
struct Rectangle *parent;
strcpy(rect._name,str);
rect._binSon[RIGHT] = NULL;
rect._binSon[LEFT] = NULL;
point = &rect;
if (recTree == NULL){
recTree = point;
} else {
struct Rectangle *current;
current = recTree;
while (current){
parent = current;
if (strcmp(point -> _name, current -> _name) > 0){
current = current -> _binSon[RIGHT];
} else {
current = current -> _binSon[LEFT];
}
}
if (strcmp(point -> _name, parent -> _name) < 0){
parent -> _binSon[LEFT] = point;
} else {
parent -> _binSon[RIGHT] = point;
}
}
}

int main(){
recTree = NULL;
char str[] = "LIKE";
insertRectToTree(str);
char str2[] = "GUIDE";
insertRectToTree(str2);
printf(recTree -> _name);
return 0;
}

如您所见,此二叉树尝试根据其名称组织记录,因此最小的字母顺序将位于左侧,依此类推。

问题是,在第一次插入“LIKE”之后,我想将“GUIDE”也插入到树中,“LIKE”仍然是根。但是,printf() 显示“GUIDE”接管了它的根。 (换句话说,“GUIDE”是输出)。对此有什么好的解释吗?问我是否需要为这个问题添加更多内容。感谢您所有的帮助。

最佳答案

在以下行中

struct Rectangle rect;
...
point = &rect;
...
recTree = point;

您将对局部变量的引用分配给全局指针。离开函数后,它可能不再包含有效数据。

关于c++ - 二叉搜索树不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com