DS | 折半查找二叉判定树的画法
以下给出我在学习中总结的一种比较简便的 构造折半二叉判定树 的思路以及方法:
思路分析:
在计算 \(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,……\))
因此可以得知,折半查找的二叉判定树 对于所有结点,左子树结点个数<=右子树结点个数。即:
- 若某序列总长 \(n\) 为奇数,左右子树结点个数相等;
- 若某序列总长 \(n\) 为偶数,左字数结点个数=右子树结点个数 -1 .
换句话说,对判定树中所有结点都有:
(左子树结点数-右子树结点数== -1)||(左子树结点数-右子树结点数 == 0)
由此给定某个序列,构建折半查找判定树方法如下三步:
- 按照结点总数先画出最大的满二叉树结构,并计算剩余几个结点。
- 将剩余结点按照上述的规律依次填入最底层即为二叉判定树的树形。
- 将给定序列依次按照 中序遍历 顺序填入各个结点。
具体如下面的例子:
例:画出(\(2,5,7,10,14,15,18,23,35,41,52\))的折半查找判定树。
序列总长度为 \(n=11>2^3-1\) 即二叉判定树为 \(4\) 层,前三层为满二叉树结构,剩余 \(4\) 个结点。
先画出 前三层 结构。

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

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

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

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

得到最终的树形如上图。(字母编号不唯一,后面中序遍历结果会不同)
该二叉树的中序遍历顺序为 \(dkbeiafjcgh\) ,
分别对应 \(2,5,7,10,14,15,18,23,35,41,52\) 。因此将序列一一对应填入树中,即

该树即为此序列的二叉判定树。
做题过程中熟练使用此方法比通过算法模拟来推断二叉判定树的速度要快许多倍。
在平时做题过程中,涉及到需要具体画出二叉判定树的题目,往往结点个数(序列长度)不超过\(2^4-1=15\) 个,即一般为高度不超过4的树,因此可以在练习时将结点个数 \(8-14\) 的所有树形画几遍,就可以很熟练的掌握这个方法。
二叉判定树画出之后便可以对其他具体题目进行分别的计算,如求成功或失败的查找长度、求比较顺序、比较次数等。
DS | 折半查找二叉判定树的画法的更多相关文章
- [数据结构]二叉搜索树(BST) VS 平衡二叉排序树(AVL) VS B树(平衡多路搜索树) VS B+树 VS 红黑树(平衡二叉B树)
1 二叉排序树/二叉查找树/Binary Sort Tree 1种对排序和查找都很有用的特殊二叉树 叉排序树的弊端的解决方案:平衡二叉树 二叉排序树必须满足的3条性质(或是具有如下特征的二叉树) 若它 ...
- 【转载】区间信息的维护与查询(一)——二叉索引树(Fenwick树、树状数组)
在网上找到一篇非常不错的树状数组的博客,拿来转载,原文地址. 树状数组 最新看了一下区间的查询与修改的知识,最主要看到的是树状数组(BIT),以前感觉好高大上的东西,其实也不过就这么简单而已. 我们有 ...
- 二叉索引树BIT
定义 二叉索引树,binary index tree,又名树状数组,或Fenwick Tree,因为本算法由Fenwick创造. 对于数组A,定义Query(i,j) = Ai +Ai ...
- C++实用数据结构:二叉索引树
看下面这个问题(动态连续和查询): 有一个数组A(长度为n),要求进行两种操作: add(i,x):让Ai增大x: query(a,b):询问Aa+Aa+1+...+Ab的和: 若进行模拟,则每次qu ...
- POJ 3321 Apple Tree dfs+二叉索引树
题目:http://poj.org/problem?id=3321 动态更新某个元素,并且求和,显然是二叉索引树,但是节点的标号不连续,二叉索引树必须是连续的,所以需要转化成连续的,多叉树的形状已经建 ...
- NYOJ 116 士兵杀敌(二)(二叉索引树)
http://acm.nyist.net/JudgeOnline/problem.php?pid=116 题意: 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的 ...
- HDU 1166 敌兵布阵(线段树 or 二叉索引树)
http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意:第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=50000),表示敌人有 ...
- [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析
本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵 ...
- ACNet: 特别的想法,腾讯提出结合注意力卷积的二叉神经树进行细粒度分类 | CVPR 2020
论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的 ...
- 数据结构与算法16—平衡二叉(AVL)树
我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度O(log2n)同时也由此而决定.但是,在某些极端的情况下(如在 ...
随机推荐
- 【uniapp】【外包杯】图片跳转到页面
<navigator class="swiper-item":url="'/subpkg/goods_detail/goods_detail'">
- JavaWeb项目练习(学生选课管理系统)一
打算做一个选课管理系统,作为期末的复习. 上需求 2.1 页面要求 (1)系统可以通过浏览器直接访问:(1分) (2)各个功能页面整体风格统一:(2分) (3)首页为用户登录页面,管理员.教师.学生三 ...
- Istio 网格的出口定义者:深入了解 Egress Gateway
本文分享自华为云社区<Istio Egress 出口网关使用>,作者:k8s技术圈. 前面我们了解了位于服务网格内部的应用应如何访问网格外部的 HTTP 和 HTTPS 服务,知道如何通过 ...
- 从0开始用Maven
一.Maven的介绍即相关概念 Maven是一款构建和管理Java项目的工具,它将项目开发和管理过程抽象成一个项目对象模型(POM),提供了一种统一的项目结构. Maven官网 1.为什么使用Mave ...
- 论文阅读:2023_Semantic Hearing: Programming Acoustic Scenes with Binaural Hearables
论文地址:语义听觉:用双耳可听器编程声学场景 论文代码:https://semantichearing.cs.washington.edu/ 引用格式:Veluri B, Itani M, Chan ...
- [AI]大模型稳定角色扮演形成“自我认知”
引言 自我身份认知是人类重要的认知能力之一,它决定着个体在社会中的定位以及与他人的互动方式.了解自我身份认知形成的机理对心理学和认知科学研究具有重要意义.传统上,人类自我认知一直被视为一个个体内在形成 ...
- 使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙
纯血鸿蒙即将到来 在今年 8 月的「2023年华为开发者大会(HDC.Together)」上,华为正式官宣「鸿蒙Next」,这个更新的版本将移除所有的 AOSP 代码,彻底与 Android 切割,使 ...
- Http请求超好用的工具类
话题不多说,直接开整 1.先导入依赖 <dependency> <groupId>io.github.admin4j</groupId> <artifactI ...
- 太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!
太震撼了!太厉害了!昆仑万维正式发布了「天工 SkyAgents」平台,助力大模型走入千家万户.你听听,这个名字一听就有一种巧夺天工的感觉,技艺那是相当的高超. 这个平台基于昆仑万维「天工大模型」打造 ...
- nginx-下载安装与配置
nginx下载 从官网下载,使用命令在linux下载即可,这个是目前稳定版最新的1.24.0版本,如果想要用旧版本直接修改版本号即可(旧版本我用的是1.12.2) 下载需要使用wget命令,默认是没有 ...