summaryrefslogtreecommitdiff
path: root/kc
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2022-01-02 04:53:19 +0000
committerAda Christine <adachristine18@gmail.com>2022-01-02 04:53:19 +0000
commit6fee34f34c046617245fb33943be552c1c5a4b82 (patch)
treea17eb7a973312310031630e110746e669b5aef35 /kc
parent76cb5ad6bc6d020c4288fe558cfc15259e7807e0 (diff)
in-order successor node
Diffstat (limited to 'kc')
-rw-r--r--kc/core/vm_tree.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/kc/core/vm_tree.c b/kc/core/vm_tree.c
index bfb0c8f..b0a0043 100644
--- a/kc/core/vm_tree.c
+++ b/kc/core/vm_tree.c
@@ -288,14 +288,22 @@ struct vm_tree_node *vmn_predecessor_key(
}
// search for the successor node for a given key
-struct vm_tree_node *vmn_successor_key(
- struct vm_tree_node *N,
- struct vm_tree_key *key)
+struct vm_tree_node *vmn_successor_node(
+ struct vm_tree_node *N)
{
- (void)N;
- (void)key;
- //TODO: write
- return NULL;
+ if (N && N->right)
+ {
+ return vmn_min(N->right);
+ }
+
+ struct vm_tree_node *p = n->parent;
+ while (p && n == p->right)
+ {
+ n = p;
+ p = p->parent;
+ }
+
+ return p;
}
struct vm_tree_node *vmn_min(struct vm_tree_node *node)