#import <Foundation/Foundation.h>
typedef struct BSTree
{
int value;
struct BSTree *left;
struct BSTree *right;
}BSTree;
@interface BinaryTree : NSObject
{
}
+(BSTree*) binaryTree_create : (int) value; /*这是建立二叉排序树的函数*/
+(BSTree*) binaryTree_search : (BSTree*) node : (int) value; /*这是查找二叉排序树的函数*/
+(BSTree*) binaryTree_insert : (BSTree*) node : (int) value; /*这是实现二叉排序树插入的函数*/
+(void) binaryTree_print : (BSTree*) node; /*这是将二叉排序树元素打印出来的函数*/
+(BSTree*) binaryTree_min : (BSTree*) node; /*这是求二叉排序树中最小元素的函数*/
+(BSTree*) binaryTree_delete : (BSTree*) node : (int) value; /*这是删除二叉排序树中元素的函数*/
@end
@implementation BinaryTree
+(BSTree*) binaryTree_create : (int) value
{
BSTree *node=(BSTree *)malloc(sizeof(BSTree));
node->value=value;
node->left=NULL;
node->right=NULL;
return node;
}
+(BSTree*) binaryTree_search : (BSTree*) node : (int) value
{
BSTree *temp_node=node;
if(temp_node==NULL)
{
NSLog(@"Value cannot be found!");
return NULL;
}
else if(value < temp_node->value)
{
return [BinaryTree binaryTree_search : temp_node->left : value];
}
else if(value > temp_node->value)
{
return [BinaryTree binaryTree_search : temp_node->right : value];
}
else
{
return temp_node;
}
}
+(BSTree*) binaryTree_insert : (BSTree*) node : (int) value
{
if(node==NULL)
{
node=[BinaryTree binaryTree_create : value];
}
else if(value < node->value)
{
node->left=[BinaryTree binaryTree_insert : node->left : value];
}
else
{
node->right=[BinaryTree binaryTree_insert : node->right : value];
}
return node;
}
+(void) binaryTree_print : (BSTree*) node
{
if(node != NULL)
{
NSLog(@"%d",node->value);
if(node->left!=NULL)
{
[BinaryTree binaryTree_print : node->left];
}
if(node->right!=NULL)
{
[BinaryTree binaryTree_print : node->right];
}
}
}
+(BSTree*) binaryTree_min : (BSTree*) node
{
if(node==NULL)
return NULL;
else if(node->left==NULL)
return node;
return [BinaryTree binaryTree_min : node->left];
}
+(BSTree*) binaryTree_delete : (BSTree*) node : (int) value
{
BSTree *temp_node=node;
if(temp_node==NULL)
{
NSLog(@"Value cannot be found!");
}
else if(value < node->value)
{
node->left=[BinaryTree binaryTree_delete : node->left : value];
}
else if(value > node->value)
{
node->right=[BinaryTree binaryTree_delete : node->right : value];
}
else if(node->right != NULL && node->left != NULL)
{
temp_node=[BinaryTree binaryTree_min : node->right];
node->value=temp_node->value;
node->right=[BinaryTree binaryTree_delete : node->right : node->value];
}
else
{
temp_node=node;
if(node->left==NULL)
node=node->right;
else if(node->right==NULL)
node=node->left;
free(temp_node);
}
return node;
}
@end
int main(int argc,const char *argv[])
{
BSTree *node=NULL;
BSTree *temp_node=NULL;
int value;
int count;
int option=1;
while(option!=0)
{
NSLog(@"\nYour choice :\n1-> Search\n2-> Insert\n3-> Delete\n4-> Display\n5-> Quit\n\n");
scanf("%d",&option);
switch(option)
{
case 1:
if(node==NULL)
NSLog(@"\nThe tree is empty.\n\n");
else
{
NSLog(@"\nInput a number :\n");
scanf("%d",&value);
temp_node=[BinaryTree binaryTree_search : node : value];
if(temp_node != NULL)
NSLog(@"\n%d is in the Tree.\n",value);
else
NSLog(@"\n%d is not in the Tree.\n",value);
}
break;
case 2:
NSLog(@"\nInput the number of array :\n");
scanf("%d",&count);
while(count>0)
{
scanf("%d",&value);
node=[BinaryTree binaryTree_insert : node : value];
count--;
}
break;
case 3:
NSLog(@"\nInput the number you want to delete :\n");
scanf("%d",&value);
if(node==NULL)
NSLog(@"\nThe tree is empty.\n");
else
{
temp_node=[BinaryTree binaryTree_search : node : value];
if(temp_node==NULL)
NSLog(@"\n%d is not in the Tree.\n",value);
else
{
node=[BinaryTree binaryTree_delete : node : value];
NSLog(@"\n%d is successfully deleted.\n",value);
}
}
break;
case 4:
if(node==NULL)
NSLog(@"\nThe tree is empty.\n");
else
[BinaryTree binaryTree_print : node];
break;
case 5:
option=0;
}
}
return 0;
}