/* --- Function: int treeheight(AvlTreeNode node, int depth) --- */ static int treeheight(AvlTreeNode node, int depth) { if (!node) return depth; else return maxval(treeheight(node->left, depth+1), treeheight(node->right, depth+1)); }
int treeheight(TreeNode* root){ if(root == NULL) return 0; int lh = treeheight(root->left); int rh = treeheight(root->right); if(abs(lh - rh) > 1 || rh == -1 || lh == -1) return -1; return max(lh, rh) + 1; }
bool isBalanced(TreeNode* root){ int h = treeheight(root); if(h == -1) return false; return true; }
void bt_dump_info(FILE *fp, bt *btr) { fprintf(fp, "BT: %p t: %d nbits: %d nbyte: %d kbyte: %d " "ksize: %d koff: %d noff: %d numkeys: %d numnodes: %d " "height: %d btr: %p btype: %d ktype: %d bflag: %d " "num: %d root: %p dirty_left: %u msize: %ld dsize: %ld " "dirty: %u\n", btr, btr->t, btr->nbits, btr->nbyte, btr->kbyte, btr->s.ksize, btr->keyofst, btr->nodeofst, btr->numkeys, btr->numnodes, treeheight(btr), (void *)btr, btr->s.btype, btr->s.ktype, btr->s.bflag, btr->s.num, btr->root, btr->dirty_left, btr->msize, btr->dsize, btr->dirty); DEBUG_BT_TYPE(fp, btr); }
void bt_treestats(struct btree *btr) { printf("root: %p, keyoff: %d, nodeptroff: %d, nkeys: %d, t: %d, nbits: %d, textra: %d, height: %d", btr->root, btr->keyoff, btr->nodeptroff, btr->nkeys, btr->t, btr->nbits, btr->textra, treeheight(btr)); #ifdef STATS printf(", numkeys: %d, numnodes: %d", btr->numkeys, btr->numnodes); #endif puts(""); }
int AVLTREEheight(AvlTree tree) { return treeheight(AVLTREEroot(tree), 0); }