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

来源:互联网 发布:绿岸网络 编辑:程序博客网 时间:2024/06/06 03:43
#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;}@endint 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕六个月体重一天增加两斤怎么办 备孕同房后一直乳头立起来怎么办 夏天出汉内衣老是湿的怎么办 大腿旁边长了红色的癣怎么办 跑步膝盖疼怎么办能不能再跑了 两周宝宝剧烈运动后咳嗽怎么办 bra的M有点紧L有点宽怎么办 穿吊带总是会露出来左胸罩杯怎么办 生小孩后腰部有一圈黑色勒痕怎么办 新买的饮水机热水口出水小怎么办 新买的饮水机热水口不出水怎么办 平胸没有适合自己的内衣怎么办 售楼小姐穿坏的丝袜都怎么办了 蛋白粉一天喝十克补不起来怎么办 跑步时没有卸妆毛孔堵塞了怎么办 自己做的葡萄酒太甜了怎么办 健身馆碰到一个帅的健身教练怎么办 随着年龄的增长脖子越来越短怎么办 安装软件时解析包出现问题怎么办 鼻子吸进去的气往嘴巴里怎么办 做完瑜伽之后大腿后侧特别紧怎么办 刚下生小狗腿后腿站不起来怎么办 脚被凳子压到了流血了怎么办还很痛 小狗脚被凳子压出血了怎么办 怀孕8个月脐带绕颈一周怎么办 练完瑜伽大腿两侧肌肉麻木怎么办 突然吃了辣火锅肚子烫怎么办 副鼻窦炎鼻头顶痛鼻子臭怎么办 一岁宝宝夜里睡觉不踏实怎么办 分手一个月了还是放不下前任怎么办 当晚上遇到烦心事睡不着该怎么办 为什么白天太累晚上就睡不着怎么办 白天走累的脚痛晚上睡不着怎么办 1岁宝宝感冒咳嗽流泪流鼻涕怎么办 宝宝不含母乳只吃奶瓶怎么办 宝宝习惯奶嘴不咬妈妈的乳头怎么办 我的乳晕和私处色素沉着怎么办 双盘打坐膝痛腿脚心处紫青怎么办? 双盘打坐两膝盖不能着地怎么办? 做完蹲起之后腿疼的受不了怎么办 孩子游泳学不会不想去了怎么办