我正在创建一个代码来在树中插入元素,但是 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
中分配根节点。
关于创建一棵二叉树,但它不起作用 - 树始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22433447/