将数据插入二叉搜索树中的链表中

时间:2018-04-24 04:42:42

标签: c linked-list binary-search-tree

目前正试图弄清楚要在main.c文件中写什么。给我的程序有一个BST来存储长数据,而有一个存储字符串的链表。到目前为止,数据结构是具有节点的二叉搜索树,并且这些节点中的每一个都包含空链表。

我的目标是通过用户输入在BST中找到一个节点,然后将字符串添加到链表中。到目前为止,这是我的代码,我现在卡住了,因为我不确定我将如何在main.c函数中实现它。

//list.h file 

typedef struct bstNode { //pointer to the bst 
    long data;  //storing long data types from -2,147,483,648 to 2,147,483,647
    List courses; //this is the list of courses 
    struct bstNode *left; //left child of the tree
    struct bstNode *right; //right child of the tree
} *BSTNodePtr;

typedef struct bst {
    BSTNodePtr root; //points to the root of the tree 
} BST;

BST new_bst();

BSTNodePtr find_bst_node(BSTNodePtr self, long n); //finds a student
void find_bst(BST *self, long n); //wrapper for finding a student

//bst.c file 

BSTNodePtr find_bst_node(BSTNodePtr self, long n) {
    if (self == NULL || (n == self->data)) {
        return self;
    }
    else if (n < self->data) {
        return find_bst_node(self->left, n);
    }
    else {
        return find_bst_node(self->right, n);
    }
}

void find_bst(BST *self, long n) { //wrapper function for find_bst_node
    return find_bst_node(self->root, n);
}

// list.h file 

typedef struct listNode {
    char* data; 
    struct listnode *next;
} *ListNodePtr; 

typedef struct list {
    ListNodePtr head;
} List;

List new_list(); //creates a new list 
void insert_at_front(List *self, char* data);

//main.c file 

void option_enrol_student(BST *self) { //finds the student, and then adds the courses into the empty list.
    long input = 0;
    char course_input; 
    long result; //var result to return BSTNodePtr

    printf("Enter the ID of the student you want to enrol\n");
    scanf("%ld", &input);
    result = find_bst_node(self, input); //looks for students in the BST this returns the result
    printf("What course would you like to enrol this student into?");
    scanf("%ld", &course_input);
    //access the result and adds user input into linked list. 
    insert_at_front(self, course_input);insert_at_front
}

find_bst_node返回一个节点,我不知道如何获得该返回并将用户输入添加到该节点的链表中。

1 个答案:

答案 0 :(得分:1)

以下是一些问题,但我不确定是否涵盖所有问题。

char course_input;
....
scanf("%ld", &course_input);

您将course_input设为char,然后使用%ld进行扫描。这对于char来说是不正确的。此外,我怀疑你想要一个炭。我想你想要一个字符串。像:

char course_input[64] = {0};
....
scanf("%63s", course_input);

另一个问题是result

的类型
long result; //var result to return BSTNodePtr

当你在评论中写下它应该是BSTNodePtr所以为什么要这么长?此外,您根本不使用result。也许你想要:

BSTNodePtr result;

....

result = find_bst(self, input);

....

insert_at_front(result, course_input);