我试图制作一个二元搜索树并逐行读取文本文件作为每行的节点,例如:
Dave Smith 0728492940
Ed James 0956294587
这样我就可以让用户输入一个名字“Dave”,它会显示他们的全名和电话号码。我只是不确定如何逐行读取文本文件到二进制搜索树,为每一行创建一个节点。目前我只打印出文本文件而不将其放入BST。 到目前为止的代码如下:
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* left;
struct node* right;
} ;
//tree wrapper structure
struct tree {
struct node *root;
} ;
typedef struct tree Tree;
typedef struct node Node;
//create a new tree
Tree *new_tree() {
Tree *t = malloc(sizeof(Tree));
t->root = NULL;
return t;
}
//create a new node
Node* NewNode(int data) {
Node* node = malloc(sizeof *node);
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
//insert in to the binary tree
Node* insert(Node* node, char *data) {
// 1. If the tree is empty, return a new, single node
if (node == NULL) {
return(NewNode(*data));
}
else {
// 2. Otherwise, recur down the tree
if (*data <= node->data) node->left = insert(node->left, data);
else node->right = insert(node->right, data);
return(node); // return the (unchanged) node pointer
}
}
//search for nodes to see if they exist
bool NodeSearch(Node* node,int data) {
if(node==NULL) return false;
else if(node->data == data) return true;
else if(data <= node ->data) return NodeSearch(node->left, data);
else return NodeSearch(node->right, data);
}
int main(){
FILE *f;
char s[1000];
f=fopen("phone.txt", "r");
if(!f)
return 1;
while (fgets(s,1000,f)!=NULL) {
printf("%s\n", s);
}
fclose(f);
return 0;
}
答案 0 :(得分:0)
如果用户输入单词,例如“史密斯”然后打印所有节点 包含那个词。
如果您需要在(部分)密钥中搜索,则使用二进制搜索树是没有意义的;你也可以使用一个简单的数组。