Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java到C的BST插入_Java_C_Insert_Binary Search Tree - Fatal编程技术网

从Java到C的BST插入

从Java到C的BST插入,java,c,insert,binary-search-tree,Java,C,Insert,Binary Search Tree,我目前正在学习C语言,我在Java方面有很多经验 我试图在BST上实现insert操作,我成功地用Java实现了它,C中的一个类似代码导致它失败,有人能帮我解决这个问题吗 //Java代码(我使用了泛型,其中键是可比较的,另一个泛型是值) 私有类节点{ 私人价值; 私钥; 私有节点左、右; 公共节点(键、值){ 这个值=值; this.key=key; } } 公共作废put(键、值){ root=put(根、键、值); } 公共节点put(节点x、键、值){ 如果(x==null) 返回新节点

我目前正在学习C语言,我在Java方面有很多经验

我试图在BST上实现insert操作,我成功地用Java实现了它,C中的一个类似代码导致它失败,有人能帮我解决这个问题吗

//Java代码(我使用了泛型,其中键是可比较的,另一个泛型是值)

私有类节点{
私人价值;
私钥;
私有节点左、右;
公共节点(键、值){
这个值=值;
this.key=key;
}
}
公共作废put(键、值){
root=put(根、键、值);
}
公共节点put(节点x、键、值){
如果(x==null)
返回新节点(键、值);
int cmp=键。比较(x.key);
if(cmp<0)
x、 左=放(x.左,键,值);
否则如果(cmp>0)
x、 右=放(x.右,键,值);
其他的
x、 价值=价值;
返回x;
}
//C代码

struct Node {
    int key;
    int value;
    struct Node *left, *right;
};

struct Node *root;

struct Node *put(struct Node *x, int key, int value) {

    if (x == NULL) {
        struct Node *newNode = malloc(sizeof(struct Node));
        return newNode;
    }

    if (key < x->key)
        x->left = insert(x->left,key,value);
    else if (key > x->key)
        x->right = insert(x->right,key,value);
    else
        x->value = value;
    return x;
}

void putMain(int key, int value) {
    root = insert(root, key, value);
}
struct节点{
int键;
int值;
结构节点*左、*右;
};
结构节点*根;
结构节点*put(结构节点*x,int键,int值){
如果(x==NULL){
结构节点*newNode=malloc(sizeof(结构节点));
返回newNode;
}
如果(键键)
x->left=插入(x->left,键,值);
否则如果(键>x->键)
x->right=插入(x->right,键,值);
其他的
x->value=value;
返回x;
}
void putMain(int键,int值){
根=插入(根、键、值);
}
的结果可以是
NULL
(在
malloc
失败时)或者是未初始化的数据。您应该清除并初始化它。因此,替换

    struct Node *newNode = malloc(sizeof(struct Node));
    return newNode;

顺便说一句,您应该使用所有警告和调试信息(例如
gcc-Wall-g
)进行编译,并使用调试器(例如
gdb
)。

的结果可以是
NULL
(如果
malloc
)或者是未初始化的数据。您应该清除并初始化它。因此,替换

    struct Node *newNode = malloc(sizeof(struct Node));
    return newNode;


顺便说一句,您应该使用所有警告和调试信息进行编译(例如,
gcc-Wall-g
)并使用调试器(例如,
gdb
)。

似乎您没有初始化
newNode

struct Node *newNode = malloc(sizeof(struct Node));
newNode->key = key;
newNode->value = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;

似乎您没有初始化
newNode

struct Node *newNode = malloc(sizeof(struct Node));
newNode->key = key;
newNode->value = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;

insert
应该
put
在C代码中
insert
应该
put
在C代码中这是有史以来最愚蠢的错误,谢谢你的帮助这是有史以来最愚蠢的错误,谢谢你的帮助你能告诉我如何在Eclipse中实现这一点吗?我使用CDT来练习编码。你应该在终端上编译,至少要学会如何做。关于Eclipse我无能为力(我不建议在C编程中使用它)。我推荐一个好的编辑器,比如
emacs
,你能告诉我如何在Eclipse中实现这一点吗?我使用CDT来练习编码。你应该在终端上编译,至少要学会如何做。关于Eclipse我无能为力(我不建议在C编程中使用它)。我推荐一个好的编辑器,比如
emacs