将书籍结构插入二进制树C ++

时间:2012-03-11 23:39:40

标签: c++

我有一个包含书名,网址和学生姓名的图书结构。我想将此数据插入二叉树。我已经编写了这些函数,但在尝试打印树时无法获得输出。

1)我的插入功能看起来是否正确?

2)我的printTree功能看起来是否正确?

3)当我调用printTree函数时,我正在传递指针。如果我想从根目录下打印,我作为根传递什么?

相关代码如下:

typedef struct book {
    char title[75];
    char url[75];
    char student[50];
} BOOK;

struct tree_node {
    BOOK data;
    struct tree_node *left;
    struct tree_node *right;
};


    int insert_book() {     // insert an new book

        BOOK contact;

        cout << endl << "@Inserting Book.........." << endl;
        cout << "Enter the Book Title: ";
        cin.ignore();
        cin.getline(contact.title, 75);
        cout << "Enter the Book URL: ";
        cin.getline(contact.url, 75);
        cout << "Enter the Student: ";
        cin.getline(contact.student, 50);


        void insert(BOOK, tree_node); 

        return 0;

    }


    struct tree_node * insert(BOOK contact, struct tree_node* node) {

        if(node == NULL)
            return(create_node(contact));

        else if(strcmp(contact.student, node->data.student) <= 0)
            node->left = insert(contact, node->left);

        else if(strcmp(contact.student, node->data.student) >= 0)
            node->right = insert(contact, node->right);

        return (node);
    }

    struct tree_node* create_node(BOOK contact) {

        struct tree_node* node = new(struct tree_node);

        node->data = contact;
        node->left = NULL;
        node->right = NULL;

        return(node);
    } 

    void printTree(struct tree_node* node) { 
        if (node == NULL)
            cout << "Empty!" << endl;
        if(node != NULL) {
            printTree(node->left); 
            printf("%d ", node->data); 
            printTree(node->right);
        }
    }

2 个答案:

答案 0 :(得分:0)

我不会在void insert(BOOK, tree_node);中看到int insert_book()的内容。它看起来像是一个前瞻性声明,但我从来没有见过另一个功能。它编译吗?

尝试将void insert(BOOK, tree_node);更改为insert(contact, NULL);,它应该有效。 Haven没有对它进行过严格的测试。

答案 1 :(得分:0)

  1. 您的插入功能看起来是正确的,但同时使用&lt; =和&gt; =有点令人困惑。如果&lt; = condition为真,那么只有&gt;是否可能留给其他案件。另外我假设你对insert()的调用是一个类型-o,因为你传递的是BOOK,而不是实例。
  2. 您的打印功能逻辑看起来正确,但printf()格式说明符不正确。你应该有类似的东西:printf(“%s”,node-&gt; data.title);
  3. 您实施的打印功能称为“按顺序遍历”。您应该查找级别顺序遍历以查看如何从根目录打印。
  4. 另外注意,你使用的是c ++,但是采用非常简洁的方式编码。我会考虑重新组织代码以提高可读性。