From f69c64a378bbeab845bd66e100a641a5444ef630 Mon Sep 17 00:00:00 2001 From: mo khan Date: Sun, 12 Jul 2020 15:58:29 -0600 Subject: Delegate to the single traverse function --- src/02/01/binary_tree.c | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'src/02/01/binary_tree.c') 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); } -- cgit v1.2.3