//mytree.h
#pragma once
typedef int ElemType;
#ifndef _MYTREE_H_
#define _MYTREE_H_
struct TreeNode;
typedef struct TreeNode *SearchTree;
typedef struct TreeNode *Position;
void MakeEmpty(SearchTree tree);
SearchTree Insert(SearchTree tree, ElemType x);
SearchTree Delete(SearchTree tree, ElemType x);
Position find(SearchTree tree, ElemType x);
Position findMin(SearchTree tree);
Position findMax(SearchTree tree);
void printTree(SearchTree tree,ElemType n);
ElemType Retrieve(Position tree);
#endif
struct TreeNode
{
ElemType element;
SearchTree left;
SearchTree right;
};
//mytree.cpp
#include <stdlib.h>
#include <stdio.h>
#include "mytree.h"
void MakeEmpty(SearchTree tree)
{
while (tree != NULL)
{
MakeEmpty(tree->left);
MakeEmpty(tree->right);
free(tree);
}
}
SearchTree Insert(SearchTree tree, ElemType x)
{
if (tree == NULL)
{
tree = (SearchTree)malloc(sizeof(struct TreeNode));
if (tree == NULL)
return NULL;
else
{
tree->element = x;
tree->left = NULL;
tree->right = NULL;
return tree;
}
}
else if (x < tree->element)
tree->left=Insert(tree->left, x);
else if (x > tree->element)
tree->right=Insert(tree->right, x);
return tree;
}
SearchTree Delete(SearchTree tree, ElemType x)
{
SearchTree tempTree = NULL;
if (tree == NULL)
return NULL;
else
{
if (x < tree->element)
tree->left = Delete(tree->left, x);
else if (x>tree->element)
tree->right = Delete(tree->right, x);
else
{
if (tree->left&&tree->right)
{
tempTree = findMin(tree->right);
tree->element = tempTree->element;
tree->right = Delete(tree->right, tempTree->element);
}
else
{
if (tree->left == NULL)
{
tempTree = tree;
tree = tree->right;
}
else if (tree->right == NULL)
{
tempTree = tree;
tree = tree->left;
}
else
tree = NULL;
free(tempTree);
}
}
}
return tree;
}
Position find(SearchTree tree, ElemType x)
{
if (tree == NULL)
{
return NULL;
}
else if (x < tree->element)
{
return find(tree->left, x);
}
else if (x>tree->element)
return find(tree->right, x);
else
return tree;
}
Position findMin(SearchTree tree)
{
if (tree == NULL)
return NULL;
else
{
if (tree->left != NULL)
return findMin(tree->left);
else
return tree;
}
}
Position findMax(SearchTree tree)
{
if (tree == NULL)
return NULL;
else
{
if (tree->right != NULL)
return findMax(tree->right);
else
return tree;
}
}
void printTree(SearchTree tree,ElemType n)
{
int m = n;
if (tree == NULL)
return;
else
{
while (--m)
{
printf(" ");
}
printf("%d\n",tree->element);
printTree(tree->left, n + 1);
printTree(tree->right, n + 1);
}
}
ElemType Retrieve(Position tree)
{
if (tree != NULL)
return tree->element;
else
return -1;
}
//main.cpp
#include <stdlib.h>
#include <stdio.h>
#include "mytree.h"
int main(int *argc, int *args[])
{
SearchTree tree = NULL;
int number = 15;
MakeEmpty(tree);
tree = Insert(tree, 10);
tree = Insert(tree, 12);
tree = Insert(tree, 8);
tree = Insert(tree, 15);
tree = Insert(tree, 9);
tree = Insert(tree, 6);
printTree(tree, 1);
printf("\n\n");
printf("findMin=%d\n", Retrieve(findMin(tree)));
printf("findMax=%d\n", Retrieve(findMax(tree)));
printf("find%d = %d\n", number, Retrieve(find(tree, number)));
tree = Delete(tree, 15);
tree = Delete(tree, 8);
tree = Delete(tree, 6);
tree = Delete(tree, 11);
tree = Delete(tree, 10);
tree = Delete(tree, 12);
tree = Delete(tree, 9);
printTree(tree, 1);
printf("\n\n");
system("PAUSE");
return 0;
}