3 * Miscellaneous operations for AVL trees
5 * (c) 2024 Straylight/Edgeware
8 /*----- Licensing notice --------------------------------------------------*
10 * This file is part of Xyla, a library of binary trees.
12 * Xyla is free software: you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 3 of the License, or (at your
15 * option) any later version.
17 * Xyla is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with Xyla. If not, see <https://www.gnu.org/licenses/>.
26 /*----- Header files ------------------------------------------------------*/
31 /*----- Main code ---------------------------------------------------------*/
33 int xyla_avl_height(const struct xyla_avl_node *node)
35 /* Return the height for the (sub)tree rooted at NODE. This is primarily
36 * useful as input to `xyla_avl_join' and `xyla_avl_split'.
43 /* Count one for this step. */
46 /* Use the balance annotations to discover a minimal path to a leaf. */
47 switch (node->avl.f&XYLA_AVLF_BALMASK) {
48 case XYLA_AVLBAL_LBIAS:
49 ht++; node = CONST_AVL_NODE(node->bt.right);
51 case XYLA_AVLBAL_RBIAS:
52 ht++; node = CONST_AVL_NODE(node->bt.left);
54 case XYLA_AVLBAL_EVEN:
55 node = CONST_AVL_NODE(node->bt.left);
62 /*----- That's all, folks -------------------------------------------------*/