Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
C中的AVL树,inoder(和其他函数)不起作用_C_Avl Tree_Inorder - Fatal编程技术网

C中的AVL树,inoder(和其他函数)不起作用

C中的AVL树,inoder(和其他函数)不起作用,c,avl-tree,inorder,C,Avl Tree,Inorder,我是一个编程新手,正在为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树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\u in\u order\u 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);
}

void AVL\u in_order\u 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);
}

void AVL\u in\u order\u walk(AVLTree*avlt)那是一个函数声明,不是函数调用。是的,那当然是我的错。我主要用递归调用中的“AVL_in_order_walk(avlt);”来调用它-AVL_in_order_walk(avlt->root->left);,传递的参数类型为(AVLNode*),而函数要求参数类型为(AVLTree*)。函数调用的相同问题-顺序中的AVL\u(avlt->root->right);在帕斯卡语中建立一个AVL树是本科课程的家庭作业。您想要构建一个红黑trie(除非这是家庭作业)。
void AVL\u in\u order\u walk(AVLTree*avlt)那是一个函数声明,不是函数调用。是的,那当然是我的错。我主要用递归调用中的“AVL_in_order_walk(avlt);”来调用它-AVL_in_order_walk(avlt->root->left);,传递的参数类型为(AVLNode*),而函数要求参数类型为(AVLTree*)。函数调用的相同问题-顺序中的AVL\u(avlt->root->right);在帕斯卡语中建立一个AVL树是本科课程的家庭作业。你想建立一个红黑trie(除非这是家庭作业)。听起来不错,但我如何正确地称呼它?无论我做什么,我都会收到10亿条警告/错误/。。。我看不出有什么理由去改变一些主要的东西,所以我在这两个函数中做了一些错误的事情,我想,我把它叫做你写下来的。我必须在“无效”之前更改某些内容吗?如果我没有错误,如果我称之为“静态”和“外部”,我也会得到它们…@ ykykyk——我刚才注意到一些关于你的代码的事情,这让我感到奇怪,你是在C或C++中构建你的代码吗?C,确切地说什么?@ ykykyk——不,你的问题中的代码无效。它应该是
void AVL\u in\u order\u walk(struct AVLTree*avlt)
。在C中,StuttTAG(<代码> AVLTree < /C> >)本身并不命名类型,但它在C++中是这样命名的。所以,如果你只得到警告,你正在构建C++,而不是C.@ ykykyk——你应该用代码包含<代码> TyPulf s,这样我们就不必猜测实际代码中可能或不可能的东西。听起来不错,但是我怎么才能正确调用它呢?无论我做什么,我都会收到10亿条警告/错误/。。。我看不出有什么理由去改变一些主要的东西,所以我在这两个函数中做了一些错误的事情,我想,我把它叫做你写下来的。我必须在“无效”之前更改某些内容吗?如果我没有错误,如果我称之为“静态”和“外部”,我也会得到它们…@ ykykyk——我刚才注意到一些关于你的代码的事情,这让我感到奇怪,你是在C或C++中构建你的代码吗?C,确切地说什么?@ ykykyk——不,你的问题中的代码无效。它应该是
void AVL\u in\u order\u walk(struct AVLTree*avlt)
。在C中,StuttTAG(<代码> AVLTree < /C> >)本身并不命名类型,但它在C++中是这样命名的。所以,如果你只得到警告,你正在构建C++,而不是C.@ ykykyk——你应该用代码包含<代码> TyPulf s,这样我们就不必猜测实际代码中可能或不可能的东西。