C语言中的AVL树迭代器
我正在尝试创建一个AVL树迭代器,但在这样做时遇到了问题。这是我必须得到的第一个节点的代码,它成功地返回了最小值C语言中的AVL树迭代器,c,iterator,avl-tree,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
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,并使用其指向左侧、右侧和父级的链接