ucx/avl.c

changeset 245
db732f8c083a
parent 243
2e74828c5e94
child 250
b7d1317b138e
equal deleted inserted replaced
244:98dc2d3a9b1d 245:db732f8c083a
312 } 312 }
313 313
314 size_t ucx_avl_count(UcxAVLTree *tree) { 314 size_t ucx_avl_count(UcxAVLTree *tree) {
315 return ucx_avl_countn(tree->root); 315 return ucx_avl_countn(tree->root);
316 } 316 }
317
318 UcxAVLNode* ucx_avl_pred(UcxAVLNode* node) {
319 if (node->left) {
320 UcxAVLNode* n = node->left;
321 while (n->right) {
322 n = n->right;
323 }
324 return n;
325 } else {
326 UcxAVLNode* n = node;
327 while (n->parent) {
328 if (n->parent->right == n) {
329 return n->parent;
330 } else {
331 n = n->parent;
332 }
333 }
334 return NULL;
335 }
336 }
337
338 UcxAVLNode* ucx_avl_succ(UcxAVLNode* node) {
339 if (node->right) {
340 UcxAVLNode* n = node->right;
341 while (n->left) {
342 n = n->left;
343 }
344 return n;
345 } else {
346 UcxAVLNode* n = node;
347 while (n->parent) {
348 if (n->parent->left == n) {
349 return n->parent;
350 } else {
351 n = n->parent;
352 }
353 }
354 return NULL;
355 }
356 }

mercurial