我正在创建代码以将元素插入树中,但是tinsert函数不会插入;我的代码有什么问题?我已经检查了很多次,但树始终为NULL。

该代码只有2个功能:一个要插入,第二个要按顺序显示。

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

struct btree {
    int val;
    struct btree *left;
    struct btree *right;
};

static int c=0;
typedef struct btree node;

void tinsert( node *n,int a)
{
    c++;
    printf("%d\n",c);
    if(n==NULL)
    {
        n=(node *)malloc(sizeof(node));
        n->left=NULL;
        n->right=NULL;
        n->val=a;
        //printf("adding root %d\n",n->val);
        //n=temp;
    }
    else if(a>=(n->val))
        tinsert(n->right,a);
    else
        tinsert(n->left,a);
    return ;
}

void preorder_display(node *n)
{
    if(n!=NULL)
    {
        printf("%d\n",n->val);
        preorder_display(n->left);
        preorder_display(n->right);
    }
    else
        printf("tree is null\n");
}

int main()
{
    //int N;
    //int num[100];
    //int i;
    node *ntree=NULL;

    tinsert(ntree,4);
    tinsert(ntree,6);
    tinsert(ntree,8);
    tinsert(ntree,1);

    printf("tree is \n");
    preorder_display(ntree);

    return 0;
}

最佳答案

tinsert在您的ntree的本地副本上工作,它不会更改main中的副本。您可以通过将指针传递给它来修复它(即:双指针,指向指针的指针)。

因此,您的tinsert将如下所示:

void tinsert( node **n,int a)


在您的main中,您将这样称呼它:

tinsert(&ntree,4);


当然,您需要调整tinsert中的代码以取消引用指针并正确访问它。

或在main中分配根节点。

08-03 19:57