排序二叉树二叉排序树的操作
排序二叉树 时间:2021-09-12 阅读:(
)
二叉排序树的构造和查找方法
二叉排序树的构造过程:按照给定序列,以此将结点插入二叉排序树中,在二叉排序树中插入新结点,要保证插入后的二叉树仍符合二叉排序树的定义。
插入过程:若二叉排序树为空,则待插入结点*S作为根结点插入到空树中;
当非空时,将待插结点关键字S->key和树根关键字t->key进行比较,
若s->key = t->key,则无须插入,若s->key< t->key,则插入到根的左子树中,
若s->key> t->key,则插入到根的右子树中。
而子树中的插入过程和在树中的插入过程相同,
如此进行下去,直到把结点*s作为一个新的树叶插入到二叉排序树中,或者直到发现树已有相同关键字的结点为止。
说明:
① 每次插入的新结点都是二叉排序树上新的叶子结点。
② 由不同顺序的关键字序列,会得到不同二叉排序树。
③ 对于一个任意的关键字序列构造一棵二叉排序树,其实质上对关键字进行排序。
查找的过程类似,从根结点开始进行比较,小于根结点的在左子树上,大于根结点的在右子树上,以此查找下去,直到查找成功或不成功(比较到叶子结点)。
100。120。110。130。80。60。90。构造二叉排序树
构造二叉排序树时遵照定义即可:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
则该树应为
100
╱ ╲
80 120
╱ ╲ ╱ ╲
60 90 110 130二叉排序树
二叉排序树 目录[隐藏]
二叉排序树
二叉排序树的查找
二叉排序树的插入和删除
插入算法
[编辑本段]二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树。
它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;
[编辑本段]二叉排序树的查找
步骤:若根结点的关键字值等于查找的关键字,成功。
否则,若小于根结点的关键字值,递归查左子树。
若大于根结点的关键字值,递归查右子树。
若子树为空,查找不成功。
[编辑本段]二叉排序树的插入和删除
与次优二叉树相对,二叉排序树是一种动态树表。
其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的节点时再进行插入。
新插入的结点一定是一个新添加的叶子节点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
[编辑本段]插入算法
首先执行查找算法,找出被插结点的父亲结点。
判断被插结点是其父亲结点的左、右儿子。
将被插结点作为叶子结点插入。
若二叉树为空。
则首先单独生成根结点。
注意:新插入的结点总是叶子结点。
//在二叉排序树中插入查找关键字key void InsertBST(t,key) { if(t==NULL) { t=new BiTree; t->lchild=t->rchild=NULL; t->data=key; return; } if(key<t->data ) InsertBST(t->lchild,key); else InsertBST (t->rchild, key ); } //n个数据在数组d中,tree为二叉排序树根 void CreateBiTree(tree,d[ ],n) { tree=NULL; for(i=0;i<n;i++) InsertBST(tree,d); } 最小值二叉树c例程: #include<stdio.h> struct priorityqueue { int capacity; int size; int *elements; }*tryit; struct priorityqueue *initialize ( int maxelements ) { struct priorityqueue *h; h = malloc ( sizeof ( struct priorityqueue ) ); h -> elements = malloc ( sizeof ( int ) * ( maxelements + 1 ) ); h -> capacity = maxelements; h -> size = 0; h -> elements[0] = -23767; return h; } void insert ( int x , struct priorityqueue *h ) { int i; for ( i = ++h -> size ; h -> elements[ i / 2 ] > x ; i /= 2 ) h -> elements[ i ] = h -> elements[ i / 2 ]; h -> elements [ i ] = x; } int deletemin ( struct priorityqueue *h ) { int i , child ; int minelement , lastelement; minelement = h -> elements[ 1 ]; lastelement = h -> elements[ h -> size-- ]; for ( i = 1 ; i * 2 <= h -> size ; i = child ) { child = i * 2; if ( child != h -> size && h -> elements[ child + 1 ] < h -> elements[ child ] ) child++; if ( lastelement > h -> elements[ child ] ) h -> elements[ i ] = h -> elements[ child ]; else break; } h -> elements[ i ] = lastelement; return minelement; } main() { tryit = initialize ( 10 ); insert ( 4 , tryit ); insert ( 5 , tryit ); insert ( 10 , tryit ); insert ( 3 , tryit ); printf ( "%d
" , deletemin ( tryit ) ); printf ( "%d
" , deletemin ( tryit ) ); printf ( "%d
" , deletemin ( tryit ) ); printf ( "%d
" , deletemin ( tryit ) ); getch(); }二叉排序树的操作
实验目的】
由读入数据构造二叉排序树,并进行插入,查找,删除操作。
【设计原理】
二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:
1. 若它的左子树不空,则右子树上所有结点的值均大于它的根结点的值
2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
3. 它的左,右子树也分别为二叉排序树
【算法描述】
查找:以二叉链表为存储结构,二叉排序树不空时,首先将给定值和根结点的关键字比较,若相等,则查找成功,否则按大小关系,分别在左,右子树上继续查找。
插入:在查找过程中,当树中不存在关键字等于定值的结点时再进行插入。
插入的是在叶子结点。
删除:1.若待删结点为叶子结点,即删去该结点。
2.若待删结点只有左或右子树,即将该子树直接连到待删结点的双亲的对应子树。
4. .若待删结点左右子树都不空,则将它中序遍历的直接前驱替代它,再删去这个前驱结点。
【程序清单】
#include <stdio.h>
#include <conio.h>
#define NULL 0
#define MAX 20
struct node
{int data;
struct node *r,*l;
}*head,*inord[MAX];
int count=0;
int n=0;
myprint(int x,int y,char *s,int tc,int bc)
{
gotoxy(x,y);
textcolor(tc);
textbackground(bc);
cprintf(s);
WordPress专业外贸企业网站搭建模版,特色专业外贸企业风格 + 自适应网站开发设计 通用流行的外贸企业网站模块 + 更好的SEO搜索优化和收录 自定义多模块的产品展示功能 + 高效实用的后台自定义模块设置!采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera...
昔日数据怎么样?昔日数据是一个来自国内服务器销售商,成立于2020年底,主要销售国内海外云服务器,目前有国内湖北十堰云服务器和香港hkbn云服务器 采用KVM虚拟化技术构架,湖北十堰机房10M带宽月付19元起;香港HKBN,月付12元起; 此次夏日活动全部首月5折促销,有需要的可以关注一下。点击进入:昔日数据官方网站地址昔日数据优惠码:优惠码: XR2021 全场通用(活动持续半个月 2021/7...
ucloud美国云服务器怎么样?ucloud是国内知名云计算品牌服务商家,目前推出全球多地机房的海外云服务器。UCloud主打的优势是海外多机房,目前正在进行的2021全球大促活动参与促销的云服务器机房就多达18个。UCloud新一代旗舰产品快杰云服务器已上线洛杉矶节点,覆盖北美和亚太地区,火热促销中, 首月低至7元,轻松体验具备优秀性能与极高性价比的快杰云服务器。点击进入:ucloud美国洛杉矶...
排序二叉树为你推荐
活跃网络十大网络家族排行榜详情站内搜索引擎站内搜索与百度的搜索引擎有什么本质性的区别?哪些大数据公司提供站内搜索这种服务?监控员工我现在在看监控一线员工的。如何做好看监控的工作?0x800ccc0f错误号: 0x800CCC0F 这个是虾米意思?t320平板电脑三星 galaxy tab pro t320怎么样360官网打不开我的360打不开gps简介GPS技术 简介超市商品价格商品进入大型超市需要哪些费用?监控软件安装监控摄像头通常用什么软件 怎么样安装软件 详细点 拜托!跨境电商开发中国的跨境电商行业怎么样,有没有发展前途
广东vps 域名服务器的作用 ion mach5 10t等于多少g idc评测网 国外私服 表单样式 evssl证书 debian6 ibrs 元旦促销 韩国名字大全 泉州电信 支付宝扫码领红包 七夕快乐英语 美国独立日 免费asp空间申请 php服务器 lamp是什么意思 更多