【问题标题】:AVL Tree Iterator in CC中的AVL树迭代器
【发布时间】:2015-02-23 12:15:07
【问题描述】:

我正在尝试创建一个 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。然后,我通过最终使 root 成为 while 循环中的最小值来弄乱我的列表。我的问题是如何在不更改父节点或根节点的情况下获得第一个节点?还是我还缺少其他东西?

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

【问题讨论】:

    标签: c iterator avl-tree


    【解决方案1】:

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

    AVLPtr first = iter->list->root;
    AVLPtr last = iter->list->root;
    
    while(first->leftChild != NULL){
        first = first->leftChild;
    }
    iter->current = first;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-04-20
      相关资源
      最近更新 更多