gpt4 book ai didi

c - 为什么我的 insert_node 函数会删除我的根? (C)

转载 作者:行者123 更新时间:2023-11-30 19:57:56 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,将带有成员字符串的节点插入到 BST 中,然后打印有关该 BST 的信息,例如高度、中序遍历、叶数等...

到目前为止,当我进行中序遍历时,它会打印作为根输入的最后一个字符串,即使它应该位于树的底部。

代码如下:

插入函数:

void insert_node(Node* root, char *nextString) {
int newLessThanRoot = strcmp( root->Word, nextString ) > 0 ? 1 : 0; // test if nextString is left or right from root

if (newLessThanRoot && root->Left != NULL) {
return insert_node(root->Left, nextString);
}
if (!newLessThanRoot && root->Right != NULL) {
return insert_node(root->Right, nextString);
}

Node* freshNode = newNode();
freshNode->Word = malloc(strlen(nextString) +1);
strcpy(freshNode->Word, nextString);
freshNode->Left = NULL;
freshNode->Right = NULL;

if (newLessThanRoot) {
root->Left = freshNode;
}
else {
root->Right = freshNode;
}
}

中序遍历函数:

void inorder(Node *temp) {
if (temp != NULL) {
inorder(temp->Left);
printf("%s ",temp->Word);
inorder(temp->Right);
}
}

它们的使用方式:

 char inputString[15];
char *inputStringPtr = &inputString[0];
Node* root;
root = newNode();
fscanf(infile,"%s",inputStringPtr);
root->Word = inputString;
//printf("Root's word: %s\n",root->Word);

while (fscanf(infile,"%s",inputStringPtr) == 1) {
insert_node(root,inputStringPtr);
printf("%s\n",inputString);
}

int numberOfStrings = num_of_strings(root);
int heightOfBST = height_of_tree(root);
int numberOfLeaves = num_of_leaves(root);

inorder(root);

输入如下所示:

b a c e d l m n o p z

所以输出(进行中序遍历时)应该是:

a b c d e l m n o p z 

但它是:

z a c d e l m n o p z

最佳答案

这里读取根节点的值:

root = newNode();
fscanf(infile,"%s",inputStringPtr);
root->Word = inputString;

在这里,您用第二个节点的值再次覆盖它:

while (fscanf(infile,"%s",inputStringPtr) == 1) {

您可以使用 strdup() 来复制根值:

root->Word = strdup(inputString);

这应该可以解决您的问题。

insert_node() 中,您可以正确复制每个新节点的值。您也可以考虑在那里使用 strdup(),而不是 malloc(strlen())/strcpy()。

关于c - 为什么我的 insert_node 函数会删除我的根? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161837/

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