objecttive-C语言使用二叉排序树实现查找、插入、删除、查看元素

#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值