我是一个新的编程和工作在AVL树atm的实现。我遇到了很多问题,在其中一个地方寻求帮助,也许在那之后我也能解决其他的问题,因为它们听起来都很相似。
我有以下功能用于按顺序打印树:

void AVL_in_order_walk(AVLTree* avlt)
{
if(avlt!=NULL){
        AVL_in_order_walk(avlt->root->left);
        printf("%d",avlt->root->value);
        AVL_in_order_walk(avlt->root->right);
        }
}

这似乎是大错特错。我收到以下警告:
passing argument 1 of ‘AVL_in_order_walk’ from incompatible pointer type [enabled by default]
  AVL_in_order_walk(avlt->root->left);

我收到了几条这样的错误/警告/说明。我想我有一个很大的问题,简单地理解一下:当我有一个函数,比如我在上面发布的in-order-walk,这个函数没有得到一个节点,它得到了整棵树。我经常在树上或insertFunctions中走几步,但是函数总是有一个起始节点,因为它被称为“void function(node*X)”。现在我有了整棵树(AVLTree*avlt),我似乎无法使用递归,是不是我错了?
顺便说一句:
树和节点的结构:
struct AVLTree
{
    struct AVLNode* root;
    int numberOfNodes;
};

struct AVLNode
{
    struct AVLNode* left;
    struct AVLNode* right;
    struct AVLNode* parent;
    int value;
    int height;
};

如何称呼:
void AVL_in_order_walk(AVLTree* avlt);

我真的很感激你的帮助,因为我就是不明白。。

最佳答案

void AVL_in_order_walk(AVLTree* avlt)声明为接受一个AVLTree*,但您尝试将其传递给一个AVLNode*编译器告诉它们是指向不同类型的指针。
我建议您添加一个可以递归调用的隐藏函数,并完成实际工作。

static void AVL_in_order_walk_implementation(AVLNode* avlt) {
  /* Implement the walk */
}

extern void AVL_in_order_walk(AVLTree* avlt) {
   if(avlt)
     AVL_in_order_walk_implementation(avlt->root);
}

08-17 04:33