以下给出我在学习中总结的一种比较简便的构造折半二叉判定树的思路以及方法:

思路分析:

在计算mid值时,使用的时mid=(low+high)/2  。这里由于mid为int类型,自动默认为向下取整,因此对于一个长度为n序列进行划分之后的序列为 (0,1,2,……,mid-1)mid(mid+1,mid+2,……n-1),此时出现两种情况:

  • 左子序列长==右子序列长      (n=2k+1    k=0,1,2,……)
  • 左子序列长==右子序列长-1   (n=2k        k=1,2,3,……)

因此可以得知,折半查找的二叉判定树对于所有结点,左子树结点个数<=右子树结点个数。即:

  1. 若某序列总长n为奇数,左右子树结点个数相等;
  2. 若某序列总长n为偶数,左字数结点个数=右子树结点个数-1.

换句话说,对判定树中所有结点都有:

(左子树结点数-右子树结点数==-1)||(左子树结点数-右子树结点数==0)

由此给定某个序列,构建折半查找判定树方法如下三步:

  1. 按照结点总数先画出最大的满二叉树结构,并计算剩余几个结点。
  2. 将剩余结点按照上述的规律依次填入最底层即为二叉判定树的树形。
  3. 将给定序列依次按照中序遍历顺序填入各个结点。

具体如下面的例子:

例:画出(2,5,7,10,14,15,18,23,35,41,52)的折半查找判定树。

1.序列总长度为n=11>2^3-1     即二叉判定树为4层,前三层为满二叉树结构,剩余4个结点。

先画出前三层结构。

2.

1)第一个结点。a的左右子树结点个数相等,所以新的结点应加入a的右子树;再看a的右子树,c的左右子树结点个数相等,所以新结点应加入c的右子树;再看c的右子树,g的左右子树结点个数相等,所以新结点应加入g的右子树;如图

2)第二个结点。a的左子树结点数-右子树结点数=-1,所以新结点应加入a的左子树(若加入右子树,对于a来说左右子树结点之差=-2,不符合规律);再看a的左子树,b的左右子树结点个数相等,所以新结点应加入b的右子树;再看b的右子树,e的左右子树结点个数相等,所以新结点应加入e的右子树。如图

3)同理分析,第三个结点应加在如图位置。

4)第四个结点加在如图位置。

得到最终的树形如上图。(字母编号不唯一,但后面中序遍历结果会不同)

3.该二叉树的中序遍历顺序为dkbeiafjcgh,分别对应2,5,7,10,14,15,18,23,35,41,52。因此将序列一一对应填入树中,即

该树即为此序列的二叉判定树。

做题过程中熟练使用此方法比通过算法模拟来推断二叉判定树的速度要快许多倍。

在平时做题过程中,涉及到需要具体画出二叉判定树的题目,往往结点个数(序列长度)不超过2^4-1=15个,即一般为高度不超过4的树,因此可以在练习时将结点个数8-14的所有树形画几遍,就可以很熟练的掌握这个方法。

二叉判定树画出之后便可以对其他具体题目进行分别的计算,如求成功或失败的查找长度、求比较顺序、比较次数等。

数据结构学习记录(二)——折半查找二叉判定树的画法相关推荐

  1. 折半查找画ASL判定树

    例子:给定11个数据元素的有序表{2,3,10,15,20,25,28,29,30,35,40}: 所有的题目都可以按照0~N的方式来处理,如下,如果不考话题直接这样做即可,如果需要画图,把下面的值当 ...

  2. 【数据结构】折半查找及其二叉判定树画法

    折半查找又叫二分查找,是数据结构中一种很重要的查找方式. 其特点有以下几个: 只能对有序的顺序表进行查找. 是一种静态查找. 查找的平均时间复杂度为o(log2n). 成功平均查找长度ASL约log2 ...

  3. 折半查找判定树的画法(较简单易懂!)

    复习数据结构做的笔记: 折半查找判定树的画法思路: 1.先画出满足有序表长度的最大满二叉树,然后将剩下的结点个数一个个插入该树 2.从上往下看,比较每个结点的左右子树结点个数,如果左右子树结点个数相同 ...

  4. 数据结构学习笔记(7.查找 8.排序)

    文章目录 第七章 查找 查找--基本概念 顺序查找 折半查找(二分法查找)--重要考点 分块查找 二叉排序树BST 平衡二叉树--AVL--重要考点 平衡二叉树的删除操作 红黑树--RBT 红黑树的插 ...

  5. c语言数据结构对学生信息折半查找,数据结构实训报告-二分查找学生管理实训报告.doc...

    数据结构实训报告-二分查找学生管理实训报告 吉林工业职业技术学院 ( 数据结构实训 ) ( 20~ 2012 学年第 学期) 指导教师: 专业班级: 计算机3101 学生姓名: 2011年月日实训项目 ...

  6. 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

    目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...

  7. java学习笔记之折半查找法(二分法)

    2019独角兽企业重金招聘Python工程师标准>>> package Xhe.com; //折半查找法(二分法) public class halfSearch {     pub ...

  8. 【算法数据结构Java实现】折半查找

    1.背景 以一个题目为例,一个整数x是一组按大小顺序排列好的数列中的一个数,我们要找到x在数列中的索引位置. 比如按从小到大排列的数列: -3,-2,0,4,5,7,12,64 我们要找到数字7的位置 ...

  9. 数据结构折半查找算法C语言,数据结构C语言实现----折半查找

    运行结果: 代码如下: #include //数组初始化函数 void Array_get(int array[],int max) { printf("请输入一个数组,大小从低到高,各个数 ...

最新文章

  1. 2021-2027年中国智能门禁系统市场研究及前瞻分析报告
  2. 《ASP.NET MVC 4 实战》----导读
  3. AngularJS之动态菜单操作指令
  4. 防火墙 iptables 禁止某个域名访问
  5. 【图像处理】MATLAB:退化函数及多种复原方法
  6. [转]一些需要禁用的PHP危险函数和禁用方法
  7. 【Node】node的模块
  8. How does setModel and getModel work in Fiori
  9. cucumber jvm_用Cucumber JVM编写BDD测试
  10. python测试脚本截图_selenium + python实现截图并且保存图片
  11. 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史
  12. [20180812]四校联考
  13. wap2app检测版本升级
  14. python编程助手_用Python做一个久坐提醒小助手的示例代码
  15. wordpress之邮箱插件的配置
  16. java excel相同的合并_Java使用Apache POI合并Excel连续相同内容的单元格
  17. 系统集成项目管理工程师(软考中级)—— 第十七章 项目沟通和干系人管理 笔记分享
  18. layui动态生成多页签
  19. matplotlib更改窗口图标
  20. java培训师简历怎么写,逆袭面经分享

热门文章

  1. USB Type-C转HDMI+USB3.0+PD快充方案扩展坞设计方案资料|带PD快充USB-C转HDMI+USB3.0多功能扩展坞电路参考|多功能扩展坞设计资料
  2. android壁纸框架,Android仿百度壁纸客户端之搭建主框架(一)
  3. 大型服务器系统安装,大型服务器怎样安装操作系统
  4. PLC--中科博微NCS4000
  5. day 21:ajax
  6. 软件测试获取动态验证码并填充selenium python
  7. JAVA计算机毕业设计成都某4S店销售管理系统Mybatis+系统+数据库+调试部署
  8. 百度地图api php开发教程,百度地图API使用方法详解_PHP
  9. [文字]史上最NB的绕口令~
  10. idempiere mysql_iDempiere 使用指南 销售发货流程