在BST插入中使用**()

时间:2016-12-11 08:12:49

标签: c pointers binary-search-tree

以下是我的BST插入函数代码。有人可以解释为什么会出现分段错误吗?

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

struct node{
    int value;
    struct node* right;
    struct node* left;
};

struct node* insert(struct node* n,int age){
    if (n==NULL){
        n = malloc(sizeof(struct node));   
        n->value = age;
        n->left = n->right = NULL; 
    }
    else if(age < n->value){ 
        n->left = insert(n->left, age);
    }
    else {
        n->right = insert(n->right, age);
    }
    return n;
}

void main(){
    int age;
    struct node* n=NULL;
    scanf("%d",&age);
    while (age!=-1){
        n=insert(n,age);    
        scanf("%d",&age);
    }
}

我提到了this,它建议使用**(引用指针)。

f( &px );
//...

void f( int **px )
{
    *px = malloc( sizeof( int ) );

    printf( "*px = %p\n", *px );
}

但是为什么我们可以通过将返回类型从void更改为node*来避免使用**?

1 个答案:

答案 0 :(得分:1)

这似乎对我有用。除了您使用scanf()的方式之外,我没有做太多改动或您的代码,当您输入1时,这并没有结束。

最好只调用scanf一次,并确保允许使用while (scanf(.....) == 1进行连续输入,以确保在终止之前始终读取一个值,在这种情况下,直到{{ 1}}是age

除非我遗漏了某些内容,否则这是建议的代码:

1