#include <stdio.h>
#include <stdlib.h>
#include "tree.h"
Tree * insertNode(Tree * tree, int value)
{
if (tree != NULL)
{
if (tree->node > value)
{
tree->left = insertNode(tree->left, value);
}
else
{
tree->right = insertNode(tree->right, value);
}
}
else
{
tree = (Tree*) malloc(sizeof(Tree));
tree->node = value;
tree->left = NULL;
tree->right = NULL;
printf("Node %d inserted!\n", value);
}
return tree;
}
void printAscending(Tree * tree)
{
if (tree != NULL)
{
printAscending(tree->left);
printf("%d\t", tree->node);
printAscending(tree->right);
}
}
void printDescending(Tree * tree)
{
if (tree != NULL)
{
printDescending(tree->right);
printf("%d\t", tree->node);
printDescending(tree->left);
}
}
int sum(Tree * tree)
{
int total = 0;
if (tree != NULL)
{
total = sum(tree->left);
total +=tree->node;
total += sum(tree->right);
}
return total;
}
int countNode(Tree * tree)
{
int total = 0;
if (tree != NULL)
{
total = countNode(tree->left);
total++;
total += countNode(tree->right);
}
return total;
}
Tree * searchNode(Tree * tree, int value)
{
if (tree != NULL)
{
if (tree->node > value)
{
return searchNode(tree->left, value);
}
else if (tree->node < value)
{
return searchNode(tree->right, value);
}
}
return tree;
}
Tree * removeNode(Tree * tree, int value)
{
Tree * nodeToBeRemoved;
if (tree->node == value)
{
nodeToBeRemoved = tree;
if (nodeToBeRemoved->left == NULL)
{
return nodeToBeRemoved->right;
}
else
{
tree = nodeToBeRemoved->left;
while(tree->right!=NULL)
{
tree = tree->right;
}
tree->right = nodeToBeRemoved->right;
return nodeToBeRemoved ->left;
}
free(nodeToBeRemoved);
}
else
{
if (tree->node > value)
{
tree->left = removeNode(tree->left, value);
}
else
{
tree->right = removeNode(tree->right, value);
}
}
return tree;
}