summaryrefslogtreecommitdiff
path: root/src/02/01/binary_tree.c
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-07-12 15:58:29 -0600
committermo khan <mo.khan@gmail.com>2020-07-12 15:58:29 -0600
commitf69c64a378bbeab845bd66e100a641a5444ef630 (patch)
tree1590937e37ec268fdb0afd1ec840f51f5f62e503 /src/02/01/binary_tree.c
parent23b4a81bb267e486c7bd1d594c400928af8729c8 (diff)
Delegate to the single traverse function
Diffstat (limited to 'src/02/01/binary_tree.c')
-rw-r--r--src/02/01/binary_tree.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/src/02/01/binary_tree.c b/src/02/01/binary_tree.c
index 7cdd197..24bdccd 100644
--- a/src/02/01/binary_tree.c
+++ b/src/02/01/binary_tree.c
@@ -9,31 +9,30 @@ Node *initialize(int data) {
return item;
}
-void preorder_traversal(Node *node, Visitor visitor) {
+void traverse(Node *node, Visitor visitor, enum Traversal traversal) {
if (!node)
return;
- visitor(node);
- preorder_traversal(node->left, visitor);
- preorder_traversal(node->right, visitor);
-}
-
-void inorder_traversal(Node *node, Visitor visitor) {
- if (!node)
- return;
-
- inorder_traversal(node->left, visitor);
- visitor(node);
- inorder_traversal(node->right, visitor);
-}
-
-void postorder_traversal(Node *node, Visitor visitor) {
- if (!node)
- return;
-
- postorder_traversal(node->left, visitor);
- postorder_traversal(node->right, visitor);
- visitor(node);
+ switch (traversal) {
+ case PREORDER:
+ visitor(node);
+ traverse(node->left, visitor, traversal);
+ traverse(node->right, visitor, traversal);
+ break;
+ case INORDER:
+ traverse(node->left, visitor, traversal);
+ visitor(node);
+ traverse(node->right, visitor, traversal);
+ break;
+ case POSTORDER:
+ traverse(node->left, visitor, traversal);
+ traverse(node->right, visitor, traversal);
+ visitor(node);
+ break;
+ default:
+ visitor(node);
+ break;
+ }
}
static void destructor(Node *node) {
@@ -41,5 +40,5 @@ static void destructor(Node *node) {
}
void destroy(Node *head) {
- postorder_traversal(head, destructor);
+ traverse(head, destructor, POSTORDER);
}