gpt4 book ai didi

c - 二叉搜索树插入在 C 中无法正常运行(可能是无知错误)

转载 作者:行者123 更新时间:2023-11-30 15:22:48 25 4
gpt4 key购买 nike

我正在尝试用 C 语言创建 BST 树结构,但在使插入函数正常工作时遇到一些困难。在阅读了一些示例后,我发现最好的方法是传递一个指向树根的指针,然后递归地插入该节点,直到找到空节点(NULL)。但是,我试图传递整个树结构(以便所有内容都被整齐地封装),我想我想出了以下解决方案:

void insert(struct Node* temp, char *s){

if (temp == NULL) {
struct Node *newNode = make_node();
newNode-> data = strdup(s);
temp = newNode;
return;


}
if (strcmp(s,temp->data) > 0) {
temp = temp->left;
insert(temp, s);
}
if (strcmp(s,temp->data) < 0) {
temp = temp->right;
insert(temp, s);
}

}
//--------------------------------------------------------------
void insert_tree(struct BSP * tree, char *s) {

struct Node *temp = tree->root;
insert(temp, s);

}
//-------------------------------------------------------------

当我插入到树中时,我调用 insert_tree(),但随后我使用 insert() 作为递归插入到应指向树根的节点上的方法。P.S BSP和节点的结构是:

typedef struct Node {
struct Node * left;
struct Node * right;
char * data;

} node;

typedef struct BSP {
struct Node * root;
int size;
}

谁能帮助我理解我做错了什么?

最佳答案

第一个答案是正确的,但你总是可以使用指针到指针,就像这样。

typedef struct Node
{
Node()
{
left = NULL;
right = NULL;
data = NULL;
}

struct Node* left;
struct Node* right;
char* data;
} node;

typedef struct BSP
{
BSP()
{
root = NULL;
size = 0;
}

struct Node* root;
int size;
} bsp;

void insert(struct Node** temp, char* s)
{
Node* node = *temp;

if (node == NULL)
{
struct Node* newNode = new Node();
newNode->data = strdup(s);
(*temp) = newNode;
return;
}

if (strcmp(s, node->data) > 0)
{
insert(&node->left, s);
}

if (strcmp(s, node->data) < 0)
{
insert(&node->right, s);
}
}

void insert_tree(struct BSP* tree, char* s)
{
insert(&tree->root, s);
tree->size++;
}

关于c - 二叉搜索树插入在 C 中无法正常运行(可能是无知错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035121/

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