我正在创建代码以将元素插入树中,但是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
中分配根节点。