/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/ /* avltsub2.h APL2 V1.0.0 ********************************************** * Included in avltree.c. * * Phase 2: Insert and rebalance. Newnode is not in tree, and may be * * inserted as appropriate child of q. * ***********************************************************************/ if (strcmp(newnode->avlname,q->avlname) < 0) q->left_child = newnode; else q->rite_child = newnode; /* Adjust balance factors of nodes on path from a to q. Note that by the definition of a, all nodes on this path must have balance factors of 0 and so will change to +-1. d=+1 implies newnode is inserted in left subtree of a. d=-1 implies newnode is inserted in right subtree of a. */ d = isign(strcmp(a->avlname,newnode->avlname)); if (d < 0) p = a->rite_child; else p = a->left_child; b = p; /* save p */ while (p != newnode) { p->avlbf = isign(strcmp(p->avlname,newnode->avlname)); if (p->avlbf < 0) p = p->rite_child; else p = p->left_child; } if (0 == a->avlbf) { /* tree is still balanced */ a->avlbf = d; return(NULL); } if (0 == a->avlbf+d) { /* tree is balanced */ a->avlbf = 0; return(NULL); }