- 2
- 0
- 约8.8千字
- 约 10页
- 2019-09-06 发布于广东
- 举报
* 由图9.4可以看出,对二叉排序树进行中序遍历,便可得到一个按关键码有序的序列,因此,一个无序序列,可通过构一棵二叉排序树而成为有序序列。 * 输入:45,24,55,12,37,53,60,28,40,70 45 24 55 12 37 60 53 28 40 70 (a) * 二.二叉排序树查找过程 从其定义可见,二叉排序树的查找过程为: ① 若查找树为空,查找失败。 ② 查找树非空,将给定值kx与查找树的根结 点关键码比较。 ③ 若相等,查找成功,结束查找过程, 否则, a.当给定值kx小于根结点关键码,查找将在以左子女为根的子树上继续进行,转① b.当给定值kx大于根结点关键码,查找将在以右子女为根的子树上继续进行,转① * 以二叉链表作为二叉排序树的存储结构,则查找过程算法程序描述如下: typedef struct NODE { ElemType elem; /*数据元素字段*/ struct NODE *lc,*rc; /*左、右指针字段*/ }NodeType; /*二叉树结点类型*/ * 【算法9.4】 int SearchElem(NodeType *t,NodeType **p,NodeType **q,KeyType kx) { /*在二叉排序树t上查找关键码为kx的元素,若找到,返回1,且q指向该结点,p指向其父结点;否则,返回0,且p指向查找失败的最后一个结点*/ int flag=0; *q=t; while(*q) /*从根结点开始查找*/ { if(kx(*q)-elem.key) /*kx大于当前结点*q的元素关键码*/ {*p=*q;*q=(*q)-rc; } /*将当前结点*q的右子女置为新根*/ else {if(kx(*q)-elem.key) /*kx小于当前结点*q的元素关键码*/ {*p=*q;*q=(*q)-lc;} /*将当前结点*q的左子女置为新根*/ else {flag=1;break;} /*查找成功,返回*/ } } /*while*/ return flag; } * 时间复杂度: 分析:在二叉排序树上进行查找的过程中,根结点为待查结点时,给定值同树中结点的比较次数仅为一次,待查结点位于最后一层时,比较的次数为树的深度。 普通情况下,对二叉排序树进行查找的时间复杂度为O( ); 最差情况下(二叉排序树为一棵单支树),其时间复杂度为O(n)。 为使得由任何初始序列构成的二叉排序树的平均查找长度是 对数级的,所以我们可使得构造的二叉排序树是一个平衡二叉树。 * 三.二叉排序树插入操作和构造一棵二叉排序树 向二叉排序树中插入一个结点的过程:设待插入结点的关键码为kx,为将其插入,先要在二叉排序树中进行查找,若查找成功,按二叉排序树定义,待插入结点已存在,不用插入;查找不成功时,则插入之。因此,新插入结点一定是作为叶子结点添加上去的。 构造一棵二叉排序树则是逐个插入结点的过程。 * 图9.5 从空树开始建立二叉排序树的过程 * 【算法9.5】 int InsertNode (NodeType **t,KeyType kx) { /*在二叉排序树*t上插入关键码为kx的结点*/ NodeType *q, *s , *p=*t; int flag=0; if(!SearchElem(*t,p,q,kx)); /*在*t为根的子树上查找*/ { s=(NodeType *)malloc(sizeof(NodeType));/*申请结点,并赋值*/ s-elem.key=kx;s-lc=NULL;s-rc=NULL; flag=1; /*设置插入成功标志*/ if(!p) t=s; /*向空树中插入时*/ else {if(kxp-elem.key) p-rc=s; /*插入结点为p的右子女*/ else p-lc=s; /*插入结点为p的左子女*/ } } return flag; } *
您可能关注的文档
- C++课件案例十二 小孩出列.ppt
- HC3I下载-医疗机构药事管理.ppt
- MBA课程:人本管理与领导艺术:高贤峰 .ppt
- SPSS教程第五章_相关分析.ppt
- 第七章_咨询目标、方法.ppt
- 《线性代数》电子教程之十四.ppt
- chp1全国最具有代表性的十大烂尾楼.ppt
- Excel03数据透视表操作与使用方法50 .ppt
- Lecture7第二章2.4-2.5 影响PN结I-V特性的因素.ppt
- 第4章多次覆盖.ppt
- 山西天一大联考2025-2026学年高二上学期期末学情监测语文试题(试卷+解析).docx
- 山西忻州部分学校2025-2026学年高一上学期2月质量检测数学试题(人教B版)(试卷+解析).docx
- 山西运城市2025-2026学年高二第一学期期末调研测试数学试题(试卷+解析).docx
- 陕西省榆林市榆阳区2025-2026学年八年级上学期期末地理试题(试卷+解析).docx
- 陕西西安市碑林区2025-2026学年度第一学期期末八年级生物试题(试卷+解析).docx
- 四川省广元市苍溪县2025-2026年八年级上学期期末道德与法治试题(试卷+解析).docx
- 江苏泰州市姜堰区2025-2026学年七年级上学期1月期末数学试题(试卷+解析).docx
- 江苏省扬州市邗江区2025-2026学年九年级上学期期末考试化学试题(试卷+解析).docx
- 江西上饶市铅山县2025-2026学年第一学期期末考试八年级数学试题(试卷+解析).docx
- 江苏扬州市高邮市2025-2026学年度第一学期期末学业质量监测试题九年级英语(试卷+解析).docx
原创力文档

文档评论(0)