From 6fb072f62c2f50118dd5cb377d10c76ece51e5fb Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 4 Oct 2020 14:36:07 +0200 Subject: Setze srcut-Marker... --- tree.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) (limited to 'tree.c') diff --git a/tree.c b/tree.c index cc2ae53..f6ccc5a 100644 --- a/tree.c +++ b/tree.c @@ -7,6 +7,7 @@ #include "util.h" +/* --8<-- tree_type */ typedef int T; struct tree_node { @@ -15,7 +16,9 @@ struct tree_node { int count; /* collision counter */ /* ggf. weitere Felder... */ }; +/* -->8-- */ +/* --8<-- tree_isBst */ static bool tree_isBstUntil(struct tree_node *tree, T min, T max) { @@ -34,7 +37,9 @@ tree_isBst(struct tree_node *tree) { return tree_isBstUntil(tree, INT_MIN, INT_MAX); } +/* -->8-- */ +/* --8<-- tree_insert */ struct tree_node * tree_insert(struct tree_node *tree, T key) { @@ -58,7 +63,9 @@ tree_insert(struct tree_node *tree, T key) return tree; } +/* -->8-- */ +/* --8<-- tree_insert_it */ struct tree_node * tree_insert_it(struct tree_node *tree, T key) { @@ -104,7 +111,9 @@ tree_insert_it(struct tree_node *tree, T key) return tree; } +/* -->8-- */ +/* --8<-- tree_detach_min */ static struct tree_node * tree_detach_min(struct tree_node **ptree) { @@ -119,7 +128,9 @@ tree_detach_min(struct tree_node **ptree) return tree; } } +/* -->8-- */ +/* --8<-- tree_remove */ struct tree_node * tree_remove(struct tree_node *tree, T key) { @@ -154,7 +165,9 @@ tree_remove(struct tree_node *tree, T key) } return tree; } +/* -->8-- */ +/* --8<-- tree_clear */ void tree_clear(struct tree_node *tree) { @@ -164,7 +177,9 @@ tree_clear(struct tree_node *tree) free(tree); } } +/* -->8-- */ +/* --8<-- tree_lookup */ struct tree_node * tree_lookup(struct tree_node *tree, T key) { @@ -178,7 +193,9 @@ tree_lookup(struct tree_node *tree, T key) return tree; } +/* -->8-- */ +/* --8<-- tree_minimum */ struct tree_node * tree_minimum(struct tree_node *tree) { @@ -188,7 +205,9 @@ tree_minimum(struct tree_node *tree) return tree; } +/* -->8-- */ +/* --8<-- tree_maximum */ struct tree_node * tree_maximum(struct tree_node *tree) { @@ -198,7 +217,9 @@ tree_maximum(struct tree_node *tree) return tree; } +/* -->8-- */ +/* --8<-- tree_height */ size_t tree_height(struct tree_node *tree) { @@ -211,7 +232,9 @@ tree_height(struct tree_node *tree) return 0; } +/* -->8-- */ +/* --8<-- tree_count */ size_t tree_count(struct tree_node *tree) { @@ -220,13 +243,17 @@ tree_count(struct tree_node *tree) return 0; } +/* -->8-- */ +/* --8<-- tree_isleaf */ bool tree_isleaf(struct tree_node *tree) { return tree->left == NULL && tree->right == NULL; } +/* -->8-- */ +/* --8<-- tree_apply_preorder */ void tree_apply_preorder(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -236,7 +263,9 @@ tree_apply_preorder(struct tree_node *tree, void (*visit)(T key, void *cl), void tree_apply_preorder(tree->right, visit, cl); } } +/* -->8-- */ +/* --8<-- tree_apply_inorder */ void tree_apply_inorder(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -246,7 +275,9 @@ tree_apply_inorder(struct tree_node *tree, void (*visit)(T key, void *cl), void tree_apply_inorder(tree->right, visit, cl); } } +/* -->8-- */ +/* --8<-- tree_apply_postorder */ void tree_apply_postorder(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -256,9 +287,11 @@ tree_apply_postorder(struct tree_node *tree, void (*visit)(T key, void *cl), voi visit(tree->key, cl); } } +/* -->8-- */ /* ===== */ +/* --8<-- tree_stack_type */ struct stack_item { struct stack_item *next; struct tree_node * data; @@ -267,13 +300,17 @@ struct stack_item { struct stack { struct stack_item *head; }; +/* -->8-- */ +/* --8<-- tree_stack_init */ static void stack_init(struct stack *stack) { stack->head = NULL; } +/* -->8-- */ +/* --8<-- tree_stack_push */ static void stack_push(struct stack *stack, struct tree_node *data) { @@ -287,7 +324,9 @@ stack_push(struct stack *stack, struct tree_node *data) else ERROR("out of memory"); } +/* -->8-- */ +/* --8<-- tree_stack_pop */ static bool stack_pop(struct stack *stack, struct tree_node **data) { @@ -305,19 +344,25 @@ stack_pop(struct stack *stack, struct tree_node **data) else return false; } +/* -->8-- */ +/* --8<-- tree_stack_peek */ static struct tree_node * stack_peek(struct stack *stack) { return (stack->head != NULL) ? stack->head->data : NULL; } +/* -->8-- */ +/* --8<-- tree_stack_empty */ static bool stack_empty(struct stack *stack) { return stack->head == NULL; } +/* -->8-- */ +/* --8<-- tree_stack_free */ void stack_free(struct stack *stack) { @@ -328,9 +373,11 @@ stack_free(struct stack *stack) free(item); } } +/* -->8-- */ /* ===== */ +/* --8<-- tree_queue_type */ struct queue_item { struct queue_item *next; struct tree_node * data; @@ -339,13 +386,17 @@ struct queue_item { struct queue { struct queue_item *head, *tail; }; +/* -->8-- */ +/* --8<-- tree_queue_init */ void queue_init(struct queue *queue) { queue->head = NULL; } +/* -->8-- */ +/* --8<-- tree_queue_put */ void queue_put(struct queue *queue, struct tree_node *data) { @@ -367,7 +418,9 @@ queue_put(struct queue *queue, struct tree_node *data) else ERROR("out of memory"); } +/* -->8-- */ +/* --8<-- tree_queue_get */ bool queue_get(struct queue *queue, struct tree_node **data) { @@ -385,13 +438,17 @@ queue_get(struct queue *queue, struct tree_node **data) else return false; } +/* -->8-- */ +/* --8<-- tree_queue_empty */ bool queue_empty(struct queue *queue) { return queue->head == NULL; } +/* -->8-- */ +/* --8<-- tree_queue_free */ void queue_free(struct queue *queue) { @@ -402,9 +459,11 @@ queue_free(struct queue *queue) free(item); } } +/* -->8-- */ /* ===== */ +/* --8<-- tree_apply_preorder_it */ void tree_apply_preorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -427,7 +486,9 @@ tree_apply_preorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), v stack_free(&stack); } } +/* -->8-- */ +/* --8<-- tree_apply_inorder_it */ void tree_apply_inorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -451,10 +512,12 @@ tree_apply_inorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), vo stack_free(&stack); } } +/* -->8-- */ // Hier eine Version für PostOrder-Iterativ: // Quelle: https://stackoverflow.com/a/16092333 +/* --8<-- tree_apply_postorder_it */ void tree_apply_postorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -488,7 +551,9 @@ tree_apply_postorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), stack_free(&stack); } } +/* -->8-- */ +/* --8<-- tree_apply_levelorder_it */ void tree_apply_levelorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), void *cl) { @@ -511,13 +576,17 @@ tree_apply_levelorder_it(struct tree_node *tree, void (*visit)(T key, void *cl), queue_free(&queue); } } +/* -->8-- */ /* ======================== */ +/* --8<-- tree_iterator_type */ struct tree_iterator { struct stack stack; }; +/* -->8-- */ +/* --8<-- tree_iterator_push_leftmost */ static void tree_iterator_push_leftmost(struct stack *stack, struct tree_node *node) { @@ -525,7 +594,9 @@ tree_iterator_push_leftmost(struct stack *stack, struct tree_node *node) stack_push(stack, node); } } +/* -->8-- */ +/* --8<-- tree_iterator_next */ struct tree_node * tree_iterator_next(struct tree_iterator *it) { @@ -537,7 +608,9 @@ tree_iterator_next(struct tree_iterator *it) return node; } +/* -->8-- */ +/* --8<-- tree_iterator_first */ struct tree_node * tree_iterator_first(struct tree_iterator *it, struct tree_node *tree) { @@ -547,13 +620,17 @@ tree_iterator_first(struct tree_iterator *it, struct tree_node *tree) return tree_iterator_next(it); } +/* -->8-- */ +/* --8<-- tree_iterator_free */ void tree_iterator_free(struct tree_iterator *it) { stack_free(&it->stack); } +/* -->8-- */ +/* --8<-- tree_preorder_iterator_next */ struct tree_node * tree_preorder_iterator_next(struct tree_iterator *it) { @@ -570,7 +647,9 @@ tree_preorder_iterator_next(struct tree_iterator *it) return node; } +/* -->8-- */ +/* --8<-- tree_preorder_iterator_first */ struct tree_node * tree_preorder_iterator_first(struct tree_iterator *it, struct tree_node *tree) { @@ -585,6 +664,7 @@ tree_preorder_iterator_first(struct tree_iterator *it, struct tree_node *tree) return NULL; } } +/* -->8-- */ /* ===== */ -- cgit v1.3