+/* Continues a *reverse* in-order traversal of the tree: returns the
+ * previous-greatest-valued node, or NULL if there is none. */
+struct avl_tree_node *
+avl_tree_prev_in_order(const struct avl_tree_node *node)
+{
+ const struct avl_tree_node *prev;
+
+ if (node->left)
+ for (prev = node->left;
+ prev->right;
+ prev = prev->right)
+ ;
+ else
+ for (prev = avl_get_parent(node);
+ prev && node == prev->left;
+ node = prev, prev = avl_get_parent(prev))
+ ;
+ return (struct avl_tree_node *)prev;
+}
+