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 } |