如何逐行读取.txt文件到二叉搜索树

时间:2015-12-03 16:55:46

标签: c binary-search-tree

我试图制作一个二元搜索树并逐行读取文本文件作为每行的节点,例如:

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;
}

1 个答案:

答案 0 :(得分:0)

  

如果用户输入单词,例如“史密斯”然后打印所有节点   包含那个词。

如果您需要在(部分)密钥中搜索,则使用二进制搜索树是没有意义的;你也可以使用一个简单的数组。