实现二进制搜索树,"从不兼容的指针类型返回"

时间:2016-06-05 23:13:32

标签: c pointers binary-search-tree

我目前正在学习C,而我在实现二叉搜索树方面遇到了问题。

我已经声明了节点和树结构,但是编译器给了我"不兼容的指针类型"警告以下四个函数返回或修改每个节点的左右指针。

我已尝试阅读其他类似问题,但我无法理解原因,因为所有类型都应该是node *

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

typedef struct{
    int data;
    struct node *left, *right;
} node;

typedef struct{
    node *root;
    int size;
} tree;

node* getLeft(node *n){
    return n->left;
}

node* getRight(node *n){
    return n->right;
}

void setLeft(node *n, node *i){
    n->left=i;
}

void setRight(node *n, node *d){
    n->right=d;
}

int main() {
    return 0;
}

错误消息是:

ask.c: In function ‘getLeft’:
ask.c:16:5: warning: return from incompatible pointer type
     return n->left;
     ^
ask.c: In function ‘getRight’:
ask.c:20:5: warning: return from incompatible pointer type
     return n->right;
     ^
ask.c: In function ‘setLeft’:
ask.c:24:12: warning: assignment from incompatible pointer type
     n->left=i;
            ^
ask.c: In function ‘setRight’:
ask.c:28:13: warning: assignment from incompatible pointer type
     n->right=d;
             ^

1 个答案:

答案 0 :(得分:3)

节点typedef声明不正确。它指的是不存在的struct node。修复只是使用命名结构而不是匿名结构(可能你打算做什么)。

typedef struct node {
    int data;
    struct node *left, *right;
} node;