b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

B排序树C语言

电脑杂谈  发布时间:2020-05-05 14:22:09  来源:网络整理

c语言 二叉排序树_二叉树遍历算法c语言_c语言排序方法

#include #include typedef int KeyType; typedef struct BinSearchNode {KeyType键; / *节点的键代码字段* /结构BinSearchNode * llink,* rlink; / *二叉树的左右指针* /} DicElement; typedef struct {int MAXNUM; / *字典中元素数量的上限* / int n; / *字典中实际元素的数量* / int *元素; / *将元素存储在字典中* /} SeqDictionary; struct BinSearchNode; typedef struct BinSearchNode * PBinSearchNode; typedef struct BinSearchNode * BinSearchTree; / *二进制排序树* / typedef BinSearchTree * PBinSearchTree; int搜索(PBinSearchTree ptree,KeyType键,PBinSearchNode *位置){PBinSearchNode p,q; p = * ptree; q = p; while(p!= NULL)(q = p; / *用q记录父节点的位置* / if(p-> key == key){* position = p; return 1;} / *成功检索* / else if(p-> key> key)p = p-> llink; / *输入左侧子树以继续搜索* / else p = p-> rlink; / *输入右侧子树以继续搜索* /} * position = q;返回0; / *检索失败,失败时位置指向父节点* /} void inOrder(BinSearchNode * p){if(p){if(p-> llink)inOrder(p-> llink) ;; printf(“%d”,p->键); if(p-> rlink)inOrder(p-> rlink);}} int插入(PBinSearchTree ptree,KeyType键)(PBinSearchNode pc语言 二叉排序树,position; if(search( ptree,key和&position)== 1)返回1; / *已经有一个节点,其密钥代码为key * / p =(PBinSearchNode)malloc(sizeof(struct BinSearchNode)); / *申请新节点* / if(p == NULL){printf(“ Error \ n”);返回0;} / *申请空间时出错* / p-> key = key; p-> llink = p-> rlink = NULL; / *分配给新节点* / if(位置== NULL)* ptree = p; / *原始树是一棵空树* /否则,如果(key key)position-> llink = p; / *插入位置*的左子树*否则,位置-> rlink = p; / *插入位置的右子树* /返回1;} int creatSearchTree(PBinSearchTree ptree,SeqDictionary * dic)//创建新的二进制排序树{int i; * ptree = NULL; / *将二进制排序树留空* / printf(“请输入字典中允许的最大元素数量\ n”); scanf(“%d”,&dic-> MAXNUM); dic-> element =(int *)malloc(sizeof(int)); printf(“请输入当前插入的元素数\ n”); scanf(“%d”c语言 二叉排序树,&dic-> n); printf(“请输入%d个不同大小的整数\ n”,dic-> n);对于(i = 0; i n; i ++){scanf(“%d”,&dic->元素[i]); if(!插入(ptree,dic->元素[i]))返回0; / *将新节点插入树中* /}返回1;} int deleteNode_a(PBinSearchTree ptree,KeyType键){PBinSearchNode parentp,p,r; p = * ptree; parentp = NULL; while(p!= NULL){if(p-> key == key)中断; / *找到一个键码为* / parentp = p的节点; / *未找到选择器树* / if(p-> key> key)p = p-> llink;否则,p = p-> rlink;}如果(p == NULL)返回0;否则,返回0. / *不存在* / if(p-> llink == NULL){/ *没有左子树* / if(parentp = = NULL)/ *删除根节点* / * ptree = p-> rlink;否则if(parentp-> llink == p)/ *将右子树链接到父节点的左链接* / parentp-> llink = p-> rlink; else / *将右子树链接到父节点的右链接* / parentp-> rlink = p-> rlink;} else / *有一个左子树* / {r = p-> llink; while(r-> rlink!= NULL)r = r-> rlink; / *在* p * r * / r-> r link = p-> rlink的左子树中找到最右边的下部节点; / *使用* r的右指针指向* p的右子* / if(parentp == NULL)* ptree = p-> llink;否则if(parentp-> llink == p)/ *将* p的左子节点链接到父节点的左链* / parentp-> llink = p-> llink; else / *将左子节点链接到父节点的右链* / parentp-> rlink = p-> llink;} free(p);返回1;} int deleteNode_b(PBinSearchTree ptree,KeyType密钥){PBinSearchNode parentp,p,r; p = * ptree; parentp = NULL; while(p!= NULL){if(p-> key == key)中断; / *查找具有关键代码的节点* / parentp = p;如果(p-> key> key)p = p-> llink; elsep = p-> rlink;}如果(p == NULL)返回0; if(p-> llink == NULL)/ *无左子树* /(if(parentp == NULL)/ *删除根节点* / * ptree = p-> rlink;否则if(parentp-> llink == p)/ *将右子树链接到父节点的左链接* / parentp-> llink = p-> rlink;否则/ *将右子树链接到父节点的右链接* / parentp-> rlink = p-> rlink;} / *以第二种方式删除* / else / *节点* p具有左子树* / {PBinSearchNode rr = p; for(r = p-> llink; r-> rlink!= NULL ; r = r-> rl ink)/ *查找p * / rr = r的左子树的最右边节点; p-> key = r-> key; / *复制节点信息* / if(rr == p )p-> llink = r-> llink; / * * r的父节点是* p * / elserr-> rlink = r-> llink; / *使用* r的左子节点代替* r * / p = r; / *要统一下面的存储* /} free(p); / *释放已删除节点的存储* /返回1;} void inset_node(PBinSearchTree&ptree){KeyType键; printf(“请输入所需的元素插入(整数) n“); scanf(“%d”,&键); insert(ptree,key);} void show(BinSearchNode * t,int len = 0)//数字形状{if(t!= NULL){show(t-> rlink,len + 1); for(int i = 1; i <= len; i ++){printf(“”);} printf(“%d \ n”,t->键);显示(t-> llink,len + 1);}} void deletenode(PBinSearchTree ptree){int delet_kind = 0,key; printf(“请输入要删除的元素!\ n”); scanf(“%d”,&键); printf(“如何删除?\ n方法1请输入1,方法2请输入0 \ n”); scanf(“%d”,&delet_kind); if(delet_kind){deleteNode_a(ptree,key); printf(“叉子排序树是: \ n”);显示(* ptree);}其他{deleteNode_b(ptree,key); printf(“通过方法2删除的二进制排序树是: \ n”);显示(* ptree);}}无效接口(void){printf(“ \ n &&&&&&&&&&&&&&输入序列号并执行相应的操作&&&&&&&&&&&& n”); printf(“输入1,重新创建二进制排序树!\ n”); printf(“----------------------------------------------- -\ n“); printf(“输入2以显示我的二进制排序树!\ n”); printf(“ ------------------------- ---------------------- ---- \ n“); printf(“输入3,在我的二进制排序树中遍历根!\ n“); printf(“ --------------------------------------------------- --- ----- \ n“); printf(“输入4以插入新元素!\ n”); printf(“ --------------------- -------------------------- ---- \ n“); printf(“输入5,删除二进制排序树中的元素!\ n”); printf(“ ------------------------------------------ ----- ---- \ n“); printf(“输入其他,退出操作!\ N”); printf(“ ---------------------------------- ------------- ---- \ n“);}无效操作(PBinSearchTree&ptree,SeqDictionary *(&dic)){int k = 1,num;而(k){接口(); scanf(“%d”,&num); switch(num){情况1: creatSearchTree(ptree,dic); //创建一个二进制排序树中断;情况2: {show(* ptree); //向我展示'S二进制排序树}中断;情况3: {printf(“二进制排序树的当前根序列为: \ n”); inOrder(* ptree); //我绕着二进制排序树旅行}情况4: {inset_node(ptree); //插入新元素} break;情况5: {deletenode(ptree); //删除二进制排序树中的元素} break;默认值: printf(“您尚未选择任何操作!请重新输入操作序列号!\ n”); k = 0; break;}}} int main(){PBinSearchTreeptree =(PBinSearchTree)malloc(sizeof(BinSearchNode *)); //分配二进制排序树节点指针SeqDictionary * dic =(SeqDictionary *)malloc(sizeof(SeqDictionary)); //分配二进制排序树指针creatSearchTree(ptree,dic); //构建二进制排序树操作(ptree,dic); getchar(); getchar();返回0;)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-199734-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 钱安安
        钱安安

        到我们家门口来挑衅

      热点图片
      拼命载入中...