在 C 中创建和显示基本 BST

Creating and displaying a basic BST in C

我确定我犯了一些愚蠢的错误,希望有人能帮助我解决我的一些基本概念。

这是我在 C 中创建和打印基本 BST 的代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct bst
{
    int value;
    struct bst *left;
    struct bst *right;
}T;

T *temp=NULL, *newnode;
T *tree; // had globally declared as NULL previously

T* createnode(int val)
{
    newnode=(T*)malloc(sizeof(T));
    if(newnode==NULL)
    {
        printf("Memory not allocated! \n");
    }
    else
    {
        newnode->value=val;
        newnode->right=NULL;
        newnode->left=NULL;
    }
    return newnode;
}

T * insert_tree(T *tree, int val)
{
    if(tree==NULL)
    {
        newnode=createnode(val);
        tree=newnode;
        return tree;
    }

    if (val < tree->value)
    {
        tree->left=insert_tree(tree->left,val);
    }
    else if(val > tree->value)
    {
        tree->right=insert_tree(tree->right, val);
    }
    return tree;
}

void display_preorder(T *tree) //changed to accept parameter
{
    if(tree)
    {
        printf("%d \n", tree->value);
        display_preorder(tree->left);
        display_preorder(tree->right);
    }
}

int main(void)
{
    insert_tree(tree,34);
    insert_tree(tree,45);
    insert_tree(tree,88);
    insert_tree(tree,87);
    display_preorder();
    return 0;
}

它运行并执行没有错误,但是,输出屏幕是空白的。

有人可以指出错误和错误吗?

谢谢。

问题出在 insert_tree 函数中。 因为您的函数仅获取树的指针而不是指向您返回值的指针的指针。 所以,总的来说,你应该把树放在等于函数的地方。 您的函数按值而不是按引用获取树指针。 像这样:

int main(void)
{
    tree = insert_tree(tree, 34);
    tree = insert_tree(tree, 45);
    tree = insert_tree(tree, 88);
    tree = insert_tree(tree, 87);
    display_preorder(tree);
    getchar();
    return 0;
}