我正在尝试编写一个程序,该程序从文件中获取换行符分隔的换行符列表并逐个将它们插入到BST中。
现在我的方式导致树中所有节点的值都是添加到树中的最后一个字符串的值。
例如,如果要插入的列表是:b a c e d z,则inorder遍历会将树打印为:z z z z z z。
我已经多次追查这段代码,无法看到导致这种情况的原因,我已经完成了一个完整的心理障碍。
以下是代码:
insert.c:
#include "node.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
void insert_node(Node* root, char *nextString) {
Node* freshNode;
freshNode = newNode();
freshNode->Word = nextString;
printf("Root->Word = %s\n",root->Word);
printf("nextString = %s\n",freshNode->Word);
int newLessThanRoot = 0;
if (strcmp(root->Word,freshNode->Word) > 0) {
newLessThanRoot = 1;
}
if (newLessThanRoot) {
if (root->Left == NULL) {
root->Left = freshNode;
}
else {
insert_node(root->Left, freshNode->Word);
}
}
if (!newLessThanRoot) {
if (root->Right == NULL) {
root->Right = freshNode;
}
else {
insert_node(root->Right, freshNode->Word);
}
}
}
void inorder(Node *temp) {
if (temp != NULL) {
inorder(temp->Left);
printf("%s ",temp->Word);
inorder(temp->Right);
}
}
main.c的相关部分:
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);