二叉排序树实验7
来源:互联网 发布:丝绸之路大数据 编辑:程序博客网 时间:2024/06/07 22:03
#include<cstdio>#include<cstdlib>#define FALSE 0#define TRUE 1 typedef int KeyType;/*二叉排序树的数据结构*/typedef struct BSTNode{ KeyType key; struct BSTNode *lchild,*rchild; }BSTNode,*BSTree;/*插入*/ BSTree Insert(BSTree tree,KeyType key){ BSTree p=tree; BSTree s,f; while(p!=NULL) { f=p; if(key==p->key) // 根是要查找的关键字 return tree; if(key<p->key) //左子树 p=p->lchild; else p=p->rchild; } s=(BSTree)malloc(sizeof(BSTNode)); //查找不成功 s->key=key; //创建新的节点 s->lchild=NULL; s->rchild=NULL; if(tree==NULL) return s; // tree为空,返回创建的新节点 s if(key<f->key) // p=tree, f=p, 如果 tree 不是空的,创建的节点 s ,为左孩子 f->lchild=s; else f->rchild=s; // 为右孩子 return tree; }/*创建二叉排序树*/ BSTree Create(){ KeyType key; BSTree tree=NULL; //初始化 tree scanf("%d",&key); while(key!=0) { tree=Insert(tree,key); scanf("%d",&key); } return tree; }//查找关键字 BSTree Search(BSTree tree,KeyType key){ BSTree p=tree; int flag=0; //标记查找不到的情况 while(p!=NULL) // tree 非空 { if(p->key==key) { printf("查找到该节点!\n"); printf("%d\n",p->key); flag=1; return p; break; } if(key<p->key) // 左边查找 p=p->lchild; else p=p->rchild; // 右边查找 } if(flag==0) { printf("查找不到该 %d 关键字!",key); return NULL; } }/*中序遍历*/void Traverse(BSTree tree){ if(tree) { Traverse(tree->lchild); printf("%d ",tree->key); Traverse(tree->rchild); } } int Delete(BSTree &p){ BSTree q,s; if(!p->rchild) // 右子树空连接它的左子树 { q=p; p=p->lchild; free(q); } else if(!p->lchild) // 左子树空连接它的右子树 { q=p; p=p->rchild; free(q); } else { // 左右子树均不空 q=p; s=p->rchild; // 后继 while(s->lchild) // 右转后,到左尽头 { q=s; s=s->lchild; } p->key=s->key; // s 被删节点的后继 if(q!=p) q->lchild=s->rchild; //重接 左子树 else q->rchild=s->rchild; // 重接 右子树 delete s; } return TRUE;}// Delete/*删除*/int DeleteBST(BSTree &tree,KeyType key) { if(!tree) return FALSE; else { if(key==tree->key) { Delete(tree); return TRUE; } else if(key<tree->key) DeleteBST(tree->lchild,key); else DeleteBST(tree->rchild,key); }}// DeleteBSTBSTree tree;int main(){ BSTree tree,p; int key1,key2,key3; int m; printf("-------------------------\n"); printf("1、创建二叉排序树.\n"); printf("2、查找关键字.\n") ; printf("3、插入关键字.\n"); printf("4、删除关键字.\n"); printf("5、退出.\n"); printf("-------------------------\n"); while(1) { printf("请选择 1-5步骤:\n"); scanf("%d",&m); switch(m) { case 1: { printf("请输入储存的信息,以 0 结束:\n"); tree=Create(); printf("\n"); Traverse(tree); printf("\n"); break; } case 2: { printf("请输入要查找的关键字:\n"); scanf("%d",&key1); p=Search(tree,key1); printf("\n"); Traverse(tree); printf("\n"); break; } case 3: { printf("请输入要插入的关键字:\n"); scanf("%d",&key2); Insert(tree,key2); printf("插入后的中序遍历为:\n"); Traverse(tree); printf("\n"); break; } case 4: { printf("请输入要删除的关键字:\n"); scanf("%d",&key3); DeleteBST(tree,key3); printf("删除后的中序遍历为:\n"); Traverse(tree); printf("\n"); break; } case 5: return 0; default:return 0; } printf("-------------------------\n"); printf("1、创建二叉排序树.\n"); printf("2、查找关键字.\n") ; printf("3、插入关键字.\n"); printf("4、删除关键字.\n"); printf("5、退出.\n"); printf("-------------------------\n"); } return 0;}
0 0
- 二叉排序树实验7
- 实验 二叉排序树
- 数据结构--上机实验实验要求:二叉排序树【拓展】
- 实验十六 二叉排序树的建立与查找
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构上机实验-二叉排序树的创建
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- SDUT3373数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- SDUTACM 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- linux下查看mysql的安装路径
- poj 1269 判断两直线的关系并求交点
- Codeforces Round #288 (Div. 2) A. Pasha and Pixels
- 2015年第一季度华为网络命令评比大赛
- k神讲故事-金融的结局
- 二叉排序树实验7
- 《人类意念力》正式发布,从精神层面解开大脑的奥秘
- C语言及程序设计初步例程-23 用if语句实现分支结构
- 新手解决SSH项目乱码问题(不用自定义fliter类)
- v$session中server字段何时为none?
- C#缓存
- VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)【转】
- 延时操作的方式:
- CSS Hack