73 lines
1.5 KiB
C
73 lines
1.5 KiB
C
#include <stdio.h>
|
|
#include<stdlib.h>
|
|
|
|
/* A binary tree node has data, pointer to left child
|
|
and a pointer to right child */
|
|
struct node
|
|
{
|
|
int data;
|
|
struct node* left;
|
|
struct node* right;
|
|
};
|
|
|
|
struct node* newNode(int data)
|
|
{
|
|
struct node* node = (struct node*)
|
|
malloc(sizeof(struct node));
|
|
node->data = data;
|
|
node->left = NULL;
|
|
node->right = NULL;
|
|
|
|
return(node);
|
|
}
|
|
|
|
struct node* insert(struct node* node, int data)
|
|
{
|
|
/* 1. If the tree is empty, return a new,
|
|
single node */
|
|
if (node == NULL)
|
|
return(newNode(data));
|
|
else
|
|
{
|
|
/* 2. Otherwise, recur down the tree */
|
|
if (data <= node->data)
|
|
node->left = insert(node->left, data);
|
|
else
|
|
node->right = insert(node->right, data);
|
|
|
|
/* return the (unchanged) node pointer */
|
|
return node;
|
|
}
|
|
}
|
|
|
|
int minValue(struct node* node) {
|
|
struct node* current = node;
|
|
|
|
/* loop down to find the leftmost leaf */
|
|
while (current->left != NULL) {
|
|
current = current->left;
|
|
}
|
|
return(current->data);
|
|
}
|
|
|
|
|
|
void deleteTree(struct node* node)
|
|
{
|
|
if (node == NULL) return;
|
|
|
|
/* first delete both subtrees */
|
|
deleteTree(node->left);
|
|
deleteTree(node->right);
|
|
|
|
/* then delete the node */
|
|
printf("\n Deleting node: %d", node->data);
|
|
free(node);
|
|
}
|
|
|
|
int size(struct node* node)
|
|
{
|
|
if (node==NULL)
|
|
return 0;
|
|
else
|
|
return(size(node->left) + 1 + size(node->right));
|
|
}
|