我正在尝试创建一个AVL Tree迭代器,但是我遇到了麻烦。这是我必须得到第一个节点的代码,它成功地返回了最小值。
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循环中成为最小值来弄乱我的列表。我的问题是如何在不更改父节点或根节点的情况下获取第一个节点?或者还有其他我想念的东西?
编辑:我是否应该使用递归顺序调用将树中每个节点保存的对象提取到单独的链表中?
答案 0 :(得分:0)
我不知道你的第一个元素是什么意思,但我会假设你的意思是最左边的叶子。如果是这样,那么你可以这样找到它:
AVLPtr first = iter->list->root;
AVLPtr last = iter->list->root;
while(first->leftChild != NULL){
first = first->leftChild;
}
iter->current = first;
您应该始终更改iter->current
并使用其左,右和父的链接。