当前位置: 首页 > 知识库问答 >
问题:

AVL树在C,InOrder(和其他函数)不起作用

厉念
2023-03-14

我是一个新手,在编程和工作的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,这个函数没有得到一个节点,而是得到了整个树。我也有过几次遍历树或插入函数,但函数总是有一个节点可以开始,因为它被称为“void function(node*X)”。现在我有了整个树(avltree*avlt),我似乎不能使用递归,因为这一点,我错了吗?

null

struct AVLTree
{
    struct AVLNode* root;
    int numberOfNodes;
};

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

null

void AVL_in_order_walk(AVLTree* avlt);

null

共有1个答案

公良鸿风
2023-03-14

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);
}
 类似资料:
  • 其他标准c函数 -> Details 其他标准c函数 abort 语法: #include <stdlib.h> void abort( void );功能: 终止程序的执行。返回值依赖于执行,可以通过返回值显示错误。 相关主题: exit() and atexit(). assert 语法: #include <assert.h> void assert( int exp );功能: 宏asse

  • 其他标准c函数 其他标准c函数 abort() 停止程序执行 assert() 当表达式非真,停止程序执行 atexit() 当程序退出执行设定的程序 bsearch() 执行折半查找 exit() 停止程序执行 getenv() 获取指定环境变量的值 longjmp() 从设定点执行程序 qsort() 执行快速排序 raise() 向程序发送信号 rand() 返回一个随机数 setjmp()

  • AVL树与自平衡二叉搜索树相同。AVL代表什么?这和发明者的名字有关吗?

  • 问题内容: 我有一个选择查询,我试图在字符串中搜索多个模式 返回零结果 然而 返回结果并 返回结果 是否可以将我所有的结果合并为一个查询?如果一个字符串匹配两者,它将如何处理? 问题答案: 如果可以的话,这会很好,但是您不能在SQL中使用该语法。 试试这个: 注意使用括号!您需要在表达式周围使用它们。 如果没有括号,它将被解析为,不会为您带来预期的结果。

  • 问题内容: 我从学习Spring开始,我创建了一个基本项目,该项目创建数据库,插入值,然后在Web浏览器中打印它。我的问题是,当我将RestController和主类放在同一个包中时- 可以,但是我想将其分发到其他包中,而当我创建新包时,移动RestController则不起作用。让我们见面解释: 我的项目看起来像: 我的控制器看起来: 当一切都在包,我写的网络浏览器的http://本地主机:80

  • 相信维基百科文章:http://en.wikipedia.org/wiki/AVL_tree AVL树高度平衡,但一般不平衡重量,也不平衡μ;[4] 也就是说,同级节点的子节点数量可能相差很大。 但是,作为AVL树是: 自平衡二叉查找树[...]。在AVL树中,任何节点的两个子树的高度最多相差一个 我不明白AVL怎么会是重量不平衡的,因为——如果我很好地理解AVL树的定义——每个兄弟姐妹都会有大约