2015-02-23 112 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並使用其指向左邊,右邊和家長。