GNU libavl 2.0.1
Author: Ben Pfaff

10.6.4 Advancing to the Next Node |

We use the same algorithm to advance an RTBST traverser as for TBST traversers. The only important difference between this code and <TBST traverser advance function 275> is the substitution of rtbst_rtag for tbst_tag[1].

    399. <RTBST traverser advance function 399> =
    void *
    rtbst_t_next (struct rtbst_traverser *trav)
    {
      assert (trav != NULL);

      if (trav->rtbst_node == NULL)
        return rtbst_t_first (trav, trav->rtbst_table);
      else if (trav->rtbst_node->rtbst_rtag == RTBST_THREAD)
        {
          trav->rtbst_node = trav->rtbst_node->rtbst_link[1];
          return trav->rtbst_node != NULL ? trav->rtbst_node->rtbst_data : NULL;
        }
      else
        {
          trav->rtbst_node = trav->rtbst_node->rtbst_link[1];
          while (trav->rtbst_node->rtbst_link[0] != NULL)
            trav->rtbst_node = trav->rtbst_node->rtbst_link[0];
          return trav->rtbst_node->rtbst_data;
        }
    }

This code is included in 395.

10.6.3 Starting at a Found Node | 10.6 Traversal | 10.6.5 Backing Up to the Previous Node