2015-02-23 84 views
0

我想创建一个AVL树迭代器,但我遇到麻烦这样做。这是我必须得到第一个节点的代码,它成功返回最小值。AVL树迭代器在C

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循环中使root最小化来搞乱我的列表。我的问题是如何在不更改父节点或根节点的情况下获得第一个节点?还是有什么我失踪?

编辑:我应该提取对象,树中的每个节点保存到一个单独的链接列表通过使用递归inorder调用?

回答

0

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

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

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

你应该总是改变iter->current并使用其指向左边,右边和家长。