C二叉树结构

C二叉树结构,c,struct,binary-tree,C,Struct,Binary Tree,我刚刚开始学习C,并尝试用struct创建一个二叉树。 当我尝试在main()中使用addTreeNode时,会出现以下编译错误: “addTreeNode的冲突类型” 和“将'BinaryTree'(也称为'struct BinaryTree')传递给不兼容类型'BinaryTree*'(也称为'struct*BinaryTree')的参数” 我在这里犯了什么根本性的错误吗 #include <stdio.h> #include <ctype.h> #include &

我刚刚开始学习C,并尝试用struct创建一个二叉树。 当我尝试在main()中使用addTreeNode时,会出现以下编译错误: “addTreeNode的冲突类型” 和“将'BinaryTree'(也称为'struct BinaryTree')传递给不兼容类型'BinaryTree*'(也称为'struct*BinaryTree')的参数”

我在这里犯了什么根本性的错误吗

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

struct BinaryTree
{
    int data;
    struct BinaryTree *left;
    struct BinaryTree *right;
};

typedef struct BinaryTree BinaryTree;

BinaryTree *addNode(int element, BinaryTree *tree);

int main(int argc, const char * argv[])
{

    BinaryTree *tree;
    tree = addTreeNode(2, tree);

 return 0;
}

// add the given element element to the tree
BinaryTree *addTreeNode(int element, BinaryTree *tree)
{
    if (tree == NULL)
    {
        tree = malloc(sizeof(BinaryTree));
        tree->data = element;
    }
    else if (element < tree->data)
    {
        addTreeNode(element, tree->left);
    }
    else
    {
      addTreeNode(element, tree->right);
    }
    return tree;
}
#包括
#包括
#包括
#包括
结构二叉树
{
int数据;
结构二进制树*左;
结构二进制树*右;
};
typedef结构二进制树二进制树;
BinaryTree*addNode(int元素,BinaryTree*tree);
int main(int argc,const char*argv[]
{
二叉树*tree;
tree=addTreeNode(2,tree);
返回0;
}
//将给定元素添加到树中
BinaryTree*addTreeNode(int元素,BinaryTree*tree)
{
if(tree==NULL)
{
tree=malloc(sizeof(BinaryTree));
树->数据=元素;
}
else if(元素<树->数据)
{
addTreeNode(元素,树->左);
}
其他的
{
addTreeNode(元素,树->右侧);
}
回归树;
}
更改此行

tree = addTreeNode(2, tree);

函数需要按指针传递,但需要按值传递

编辑:


由于您是在函数
BinaryTree*addTreeNode
中分配结构,因此应该更改
BinaryTree树
二进制树*tree内部
main
。另外,您的函数返回指向
BinaryTree*
的指针,该指针不能分配给类型为
BinaryTree

的变量,这是我在阅读标题后向下投票的另一个问题。为什么这些穷学生都要写二叉树?为什么他们必须用C来写,而我们正在做。我想这是理解C中指针和结构的经典方法。对我来说,这是C中的链表:)关于这个错误的规范文章可能会有所帮助。。。(虽然我不认为这应该是我的错)2巴特克,这不是我的错。@BartekBanachewicz:拜托,我真的认为你没有足够的经验告诉学生什么是最好的。这是一个很棒的练习。我们在树上发表文章多年后,学生们仍然觉得这很有挑战性。此外,学习指针也是一项光荣的传统。谢谢。现在我还有“addTreeNode的冲突类型”。这是什么意思?我的错,我的代码从一开始就是BinaryTree*tree,所以我想我不需要addTreeNode函数中的&-符号。但是,我仍然无法将树指针分配给addTreeNode返回的指针。如果是这种情况,您不会仍然收到相同的错误:“将'BinaryTree'(也称为'struct BinaryTree')传递给不兼容类型'BinaryTree*'(也称为'struct*BinaryTree')的参数”。这与树是否是指针无关。所有这些都已修复并正在工作。只是一堆明显的错误。谢谢你的帮助!
tree = addTreeNode(2, &tree);