Systemnahe Programmierung in C: Trennung von Traversierung und Verarbeitung in binären Bäumen |
1#include "Set.h"
2
3#include <stdlib.h>
4#include <stdio.h>
5#include <assert.h>
6
7/*--------------------*/
8
9/* ... */
10
11/*--------------------*/
12
13typedef Nat0 (*Op)(Element, Nat0, Nat0);
14
15Nat0
16foldTree(Nat0 n, Op op, Set t) {
17 if (isEmptySet(t))
18 return n;
19
20 return
21 op( t->info
22 , foldTree(n, op, t->l)
23 , foldTree(n, op, t->r)
24 );
25}
26
27/*--------------------*/
28
29static
30Nat0
31cardBT(Element e, Nat0 l, Nat0 r) {
32 return
33 1 + l + r;
34}
35
36Nat0
37card(Set s) {
38 return foldTree(0, cardBT, s);
39}
40
41/*--------------------*/
42
43static
44Nat0
45maxBT(Element e, Nat0 l, Nat0 r) {
46 return
47 1 + (l < r ? r : l);
48}
49
50Nat0
51maxPathLength(Set s) {
52 return foldTree(0, maxBT, s);
53}
54
55/*--------------------*/
56
57static
58Nat0
59minBT(Element e, Nat0 l, Nat0 r) {
60 return
61 1 + (l > r ? r : l);
62}
63
64Nat0
65minPathLength(Set s) {
66 return foldTree(0, minBT, s);
67}
68
69/*--------------------*/
|
Letzte Änderung: 22.12.2010 | © Prof. Dr. Uwe Schmidt |