插入在C中使用void*的二叉树

Cra*_*aig 0 c binary-tree insert

我必须使用结构创建一个二叉树,如下所示:

struct treenode;
typedef struct treenode* TreeNode;
struct treenode {
 void* data;
 TreeNode left, right;
};
Run Code Online (Sandbox Code Playgroud)

使用void*作为要存储在每个叶子上的数据的类型,以便可以将任何类型的对象插入到树中.

当我插入一个新的叶子时,我必须使用一个比较函数,它检查新叶子中的数据是否已经在树中,这需要两个void*参数,例如:

int compare(void* a, void* b){
..
..
}
Run Code Online (Sandbox Code Playgroud)

但如果我不知道它们是什么类型,我如何比较这两个对象呢?

解决这个问题的一些代码会非常有用.

Tro*_*nic 5

比较函数应该由树的用户提供,他知道数据的实际类型是什么.

int compare(void const* va, void const* vb) {
    Foo const* a = va;
    Foo const* b = vb;
    ...
}
Run Code Online (Sandbox Code Playgroud)