搜索整个二叉树后比较值

时间:2018-11-30 03:51:15

标签: c binary-tree

我的二叉树运行良好。但是,我试图将用户输入与二进制进行比较,以检查它们是否匹配。但是,当我检查输入内容时,它会在btree的每个孩子上打印出“没有那个名字的学生”。

是否有一种方法可以在我不匹配时仅打印一次,而在匹配时不打印? [也许我必须等到二叉树停止运行,但我不知道]

我的项目包含一个包含学生姓名的文本文件。我想知道是否有一种更简单的方法来搜索文件并将其与用户输入的字符串进行比较,而不是在btree中进行搜索。

  

C:\ Users \ dd \ c-eclipse-workspace \ Code \ src>数据库   namesids.txtmarks.txt输入命令:FN输入要搜索的名称:免费   没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名字。没有那个名字的学生。没有那个名字的学生。   名称。

void searchTreeID(struct StudentRecord* root, int id){
    // if there is left tree traverse left
    //  printf("123");
    if(root->left != NULL){
        searchTreeID(root->left, id);
    }
    if(root->ID==id){
        // print the middle
        printf("Student Name%s",root->first);
        printf(" %-10s\n",root->last);
        printf("Student ID %10d\n",root->ID);
        printf("Total Grade %15d\n",root->marks);

    }   // if there is right tree traverse right
    else{
        printf("There is no student with that ID.\n");
    }
    if(root->right != NULL){

        searchTreeID(root->right,id);
    }
}

1 个答案:

答案 0 :(得分:4)

您当前的代码混合了两个任务(搜索和打印),应该几乎总是将它们分开。

您应该有一个名为search的函数,该函数返回一个StudentRecord或为空。

您应该具有另一个打印现有学生记录的功能。

然后您的主要代码如下:

StudentRecord *student = searchStudent(name);
if (student != NULL) {
    printStudent(student);
}