在c中将节点添加到树中

aaa*_*aaa 1 c tree add

这个功能有什么问题(进程停止工作)

void ajout_el(Tree **head,int key) {
if(!(*head)) {
   (*head)->key=key;
   (*head)->left=(*head)->right=NULL;
}
else {
    if(key>(*head)->key) ajout_el(&(*head)->right,key);
    else ajout_el(&(*head)->left,key);
}}
Run Code Online (Sandbox Code Playgroud)

这是主要功能

int main() {
Tree *arb=NULL;
int i;
for(i=1;i<=10;i++) ajout_el(&arb,i);
return 0;}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

当前的问题是第一个插入将取消引用NULL指针:

if(!(*head)) {
   (*head)->key=key; /* (*head) is guaranteed to be NULL here - you've just checked! */
   (*head)->left=(*head)->right=NULL;
}
Run Code Online (Sandbox Code Playgroud)

你需要分配一些内存*head.见man malloc.

一旦你开始分配内存,你需要考虑如何释放它以避免内存泄漏.删除树的递归函数是一个很好的开始方法.

为了将来参考,解决这类问题的一个好方法是在调试器中运行程序.调试器将显示崩溃的确切行,并使您能够在崩溃时检查程序的状态.这通常可以更容易地看出出了什么问题.