c - C 语言的 AVL 树迭代器

标签 c iterator avl-tree

我正在尝试创建一个 AVL 树迭代器,但我遇到了困难。这是我必须获取第一个节点的代码,它成功返回最小值。

AVLPtr node = iter->list->root;
AVLPtr current = iter->current;
AVLPtr last = iter->last;
AVLPtr parent;

if(current == NULL || current->parent == NULL)
    parent = NULL;
else
    parent = iter->current->parent;

if(last == NULL && current == NULL){

    while(node->leftChild != NULL){
        node = node->leftChild;
        iter->current = node;
    }

}

当我去获取下一个节点时,我遇到了 SegFault。我认为这是因为我实际上在第一个 if 语句中将节点的父节点更改为 NULL。然后,我最终使根成为 while 循环中的最小值,从而弄乱了我的列表。我的问题是如何在不更改父节点或根节点的情况下获得第一个节点?还是我还缺少其他东西?

编辑:我应该使用递归中序调用将树中每个节点保存的对象提取到单独的链表中吗?

最佳答案

我不知道第一个元素是什么意思,但我假设你指的是最左边的叶子。如果是这样,那么你可以这样找到它:

AVLPtr first = iter->list->root;
AVLPtr last = iter->list->root;

while(first->leftChild != NULL){
    first = first->leftChild;
}
iter->current = first;

您应该始终更改 iter->current 并使用其指向左、右和父级的链接。

关于c - C 语言的 AVL 树迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666405/

相关文章:

c - C 中的字符串复制

c++ - 获取迭代器错误的位置

python AVL树插入

c++ - 如何定义没有中断的 STL 兼容输入迭代器?

loops - 您如何在Groovy中嵌套嵌套的迭代器?

algorithm - 家庭作业帮助 - AVL 树

java - AVL 树中序遍历不起作用

c - 从 C 中的字符串中读取变量参数

c - C 语言的 UART 通信

c - 定义为宏的标准库函数的参数类型错误