排序二叉树二叉排序树的操作
排序二叉树 时间: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);
CloudCone 商家产品还是比较有特点的,支持随时的删除机器按时间计费模式,类似什么熟悉的Vultr、Linode、DO等服务商,但是也有不足之处就在于机房太少。商家的活动也是经常有的,比如这次中国春节期间商家也是有提供活动,比如有限定指定时间段之前注册的用户可以享受年付优惠VPS主机,比如年付13.5美元。1、CloudCone新年礼物限定款仅限2019年注册优惠购买,活动开始时间:1月31...
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款到网站余额,超过2天...
阿里云香港配置图提速啦是成立于2012年的十分老牌的一个商家这次给大家评测的是 阿里云香港 16核32G 20M 这款产品,单单说价格上就是十分的离谱原价8631元/月的现价只要 999元 而且还有个8折循环优惠。废话不多说直接进入正题。优惠时间 2021年8月20日-2021年9月20日 优惠码 wn789 8折优惠阿里云香港BGP专线 16核32G 10M带宽 优惠购买 399元购买链接阿里云...
排序二叉树为你推荐
容灾备份目前有哪些容灾备份技术网络限速软件谁有网络限速的软件,路由器。很卡~别人一看电影什么都干不了。提供个限速的软件。下载成功给分!网络购物的发展网购未来的发展趋势如何?sd卡座我是一家手机生产厂的采购员,想知道按键开关、SD卡座什么厂家生产的好啊。知道的说说。谢谢主板说明书跪求联想 945GC V:2.2B主板说明书!海淀区公司注册北京海淀培训公司注册如何办理?约束是什么意思软约束是什么意思360官网打不开360官网进不了怎么办省份证查询如何免费查询个人身份证号码归属地及姓名无线互联网手机连接无线显示无互联网连接是怎么回事
域名注册使用godaddy 本网站服务器在美国维护 googleapps 服务器怎么绑定域名 国内加速器 空间服务商 租空间 彩虹ip 789电视网 135邮箱 in域名 双线机房 美国独立日 视频服务器是什么 dnspod 服务器机柜 在线tracert 跟踪路由 wordpress安装 ddos攻击软件 更多