叶子结点

数据结构二叉树的查找与遍历

Deadly 提交于 2020-02-08 13:47:46
二叉树的查找与遍历 1、有n个结点的满二叉树,计算它的度为1的结点数目、叶子结点的数目。 设度为1的结点数目为n1,叶子结点数目为n0,度为2的结点数目为n2,因该二叉树为满二叉树,所以度数为1的结点数目为0,然后根据n0=n2+1;又因为n=n0+n2;所以n=2n0-1;所以叶子结点数目为n0=2n0/2; 2、已知完全二叉树的第7层上有10个叶子,则该二叉树至多有多少个结点? 该二叉树结点数达到最大值,深度为因为8,最少深度可以为7,前七层应为满二叉树, 第七层的叶子应为本层的最右边,第8层的结点数目为(27-1_ 10)*2=108,这颗二叉树的总结点为 (27-1_ 10)*2+ (27-_ 1)=235 3、已知某度为k的树中,其度为0、1、2、…、k-1的结点数分别为n0、n1、n2、…、nk-1。求该树的结点总数n,并给出推导过程。 设该树中的叶子数为n0个。该树中的总结点数为n个,则有: n=n0+n1+n2+…+nK (1) n-1=0*n0+1*n1+2*n2+…+K*nK (2) //去掉根结点 联立(2)-(1)方程组可得: 叶子数为:n0=1+0*n1+1*n2+2*n3+...+(K-1)*nK ∴树的结点总数n=k 来源: CSDN 作者: zhupengqq1 链接: https://blog.csdn.net/zhupengqq1/article

K最邻近分类

徘徊边缘 提交于 2020-02-07 06:19:47
最邻近分类是分类方法中比较简单的一种,下面对其进行介绍 1.模型结构说明 最邻近分类模型属于“基于记忆”的非参数局部模型,这种模型并不是立即利用训练数据建立模型,数据也不再被函数和参数所替代。在对测试样例进行类别预测的时候,找出和其距离最接近的 个样例,以其中数量最多的类别作为该样例的类预测结果。 最邻近分类模型的结构可以用下图来说明,图中叉号表示输入的待分类样例,对其分类时选定一个距离范围(虚线圆圈表示的范围),在该范围内包含有 个样例(除去待分类样例外,这里 =5),这里所说的距离并不专指距离度量(如曼哈顿距离、欧氏距离等),它可以是任意一种邻近度度量(在我的博文《数据测量与相似性分析》中有介绍),此时最邻近的5个样例中,有3个“+”例,2个“-”例,故待分类样例的类别定位“+”。为了便于确定类别, 一般取奇数。 ​ 2.模型构建 2.1 K值选取 从 最邻近分类方法的分类过程可知, 值对模型的误分类率影响较大。 较小时,相当于用较小邻域中的样例进行预测,“学习”的近似误差会减小,但是“学习“的估计误差会增大,且对邻域内的样例非常敏感,若邻近的样例中包含部分噪声,预测结果就会出错, 较大时的情况则相反。 总的来说, 值减小意味着整体模型变复杂,容易发生过拟合, 值增大意味着模型变简单,导致忽略“训练”样例中一些有用信息,预测误分类率会增高。在应用中,一般 取较小的值

数据结构——红黑树

别来无恙 提交于 2020-02-06 18:37:38
文章目录 1 引言 2 定义 定义节点名称: 3 性质 4 2-3-4树和红黑树的等价关系 5 查找 6 插入 6.1(情景3) 插入节点的父节点为黑色 6.2(情景4) 插入节点的父节点为红色,叔叔节点为黑色 6.2.1(情景4.2.1) 父节点P为G左孩子,插入位置为左孩子 6.2.2(情景4.2.2) 父节点P为G左孩子,插入位置为右孩子 6.2.3(情景4.3.1) 父节点P为G右孩子,插入位置为右孩子 6.2.4(情景4.3.2) 父节点P为G右孩子,插入位置为左孩子 6.3(情景4.1) 插入节点的父节点为红色,叔叔节点为红色 6.3.1(情景4.1) 插入位置为左子树 6.3.2(情景4.1) 插入位置为右子树 7 删除 删除情景1:替换结点是红色结点 7.1 删除红色叶子节点 7.2 删除红色节点,只有左子树或只有右子树 7.3 删除红色节点,既有左子树又有右子树 7.4 删除的黑色节点仅有左子树或者仅有右子树 7.5 删除黑色的叶子节点 8 总结 9 思考题和习题答案 思考题1:黑结点可以同时包含一个红子结点和一个黑子结点吗? 习题1:请画出图15的插入自平衡处理过程。 习题2:请画出图29的删除自平衡处理过程。 推荐阅读 1 引言 红黑树 是 树 的 数据结构 中最为重要的一种。 Java 的容器 TreeSet 、 TreeMap 均使用 红黑树 实现。

基本排序方式——(四)堆排序

╄→尐↘猪︶ㄣ 提交于 2020-02-05 19:14:41
一.堆排序的概念 堆排序:就是利用堆这种数据结构来进行排序的一种算法思想,它是选择排序的一种,它包括大根堆和小根堆,都是完全二叉树。 完全二叉树:除最后一层外,其他每一层都被完全填充,并且所有的结点保持向左对齐。 满二叉树:除叶子结点外,每个结点都有两个孩子,每一层都被完全填充。 完满二叉树:除叶子结点外每个结点都有两个孩子。 大根堆:每个结点的值都大于等于它左右子结点的值 小根堆:每个结点的值都小于等于它左右子结点的值 如图所示这两种堆的结构映射到数组后,就是 9,5,8,2,3,4,7,1和1,3,5,4,2,8,9,7 所以在数组arr中大根堆和小根堆的公式如下: 大根堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2] 小根堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i + 2] 二.堆排序的基本思想 1.建堆 建堆就是建立大根堆或者小根堆,这里就以大根堆为例讲一下, 2.取值 成功建堆之后,下面就是取值了,大根堆的根就是这组数中的最大值。 思想:将根结点与大根堆的最后一个元素交换位置,然后除最后一个元素外剩下的元素再进行调整,调整为大根堆,然后根结点的元素就是次最大元素,继续前面的步骤。 三.代码 package com.westmo1.demo2; import java.util

学习数据结构:二叉树

风格不统一 提交于 2020-02-05 09:30:54
二叉树的定义 二叉树,是树的一种特殊结构。其特点是: ①每个结点最多有两棵子树,不存在度大于2的结点。 ②左子树和右子树是由次序的,不能颠倒。 特殊二叉树 1、斜树 所有结点都只有左子树的二叉树叫左斜树,同理结点只有右子树的叫右斜树。每一次只有一个结点,结点的个数与二叉树的深度相同。下面两个结构分别为左斜树和右斜树。 2、满二叉树 在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层,这样的二叉树称为满二叉树。 结合定义可得到三个结论: ①叶子结点出现在同一层。 ②非叶子结点的度一定是2. ③同样深度的二叉树中,满二叉树的结点数最多,叶子结点树最多。 如下图所示为一颗满二叉树。 完全二叉树 对一棵有n个结点的二叉树按序号从小到大开始排序,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点位置完全相同,则这棵二叉树称为完全二叉树。通俗的话说,就是这棵二叉树中间没有空缺。下图就是一颗完全二叉树。 下面的树就不是一颗完全二叉树, 结合定义可以得出结论: ①叶子结点只能出现在最下面两层。 ②最下的叶子一定集中在左部的连续位置,中间不能有空挡。 ③倒数第二层有叶子结点,那么一定在右边连续位置。 ④如果结点度为1,则该结点只有左孩子,不会存在右子树。 二叉树的性质 性质① 在二叉树的第i层上最多只有2^(i-1)个结点(i>=1)。

Python之路:常用算法与设计模式

好久不见. 提交于 2020-02-05 07:19:28
选择排序 时间复杂度 二、计算方法 1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 2.一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))。随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n))。 3.常见的时间复杂度 按数量级递增排列,常见的时间复杂度有: 常数阶O(1), 对数阶O(log2n), 线性阶O(n), 线性对数阶O(nlog2n), 平方阶O(n^2), 立方阶O(n^3),..., k次方阶O(n^k), 指数阶O(2

二叉树的定义和性质

余生长醉 提交于 2020-02-05 00:10:01
文章目录 树的定义 二叉树的定义 二叉树的性质 树的定义 树 (Tree) 是 n ( n ≥ 0 ) 个结点的 有限集 。 n = 0 时称为空树 。 在任意一棵非空树中: 有且仅有一个 特定的称为根 (Root) 的结点 当 n > 1 时,其余结点可分为 m (m > 0)个互不相交的有限集 T1、T2 ····· Tm, 其中每一个集合本身又是一棵树 ,并且称为根的 子树 ( SubTree),如图所示: n > 0 时根结点是 唯一 的,不可能存在多个根结点,数据结构中的树是只能有一个根结点 m > 0时, 子树的个数没有限制 ,但它们一定是 互不相交 的 结点分类 树的结点包含 一个数据元素 及 若干指向其子树的分支 。结点拥有的子树数称为 结点的度 (Degree)。 度为 0 的结点称为 叶结点 (Leaf) 或 终端结点 ; 度不为 0 的结点称为 非终端结点 或 分支结点 。除根结点之外, 分支结点也称为内部结点 。树的度是树内各结点的度的 最大值 。如图所示,因为这棵树结点的度的最大值是结点D的度,为3,所以树的度也为3。 结点间关系 结点的子树的根 称为该结点的 孩子 (Child),相应地,该结点称为孩子的 双亲 (Parent)。同一个双亲的孩子之间互称 兄弟 ( Sibling)。 结点的祖先是从根到该结点所经分支上的所有结点 。如图,所以对于H来说

数据结构与算法(树)

≡放荡痞女 提交于 2020-02-03 22:24:42
首语 疫情严重,需要多多注意,做好防范!戴口罩,勤洗手。献上→ 新型冠状病毒感染防护手册 ! 树 树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 结点的度 结点拥有的子树数称为结点的度。度为0的节点称为叶子结点或终端结点,度不为0的结点称为非终端结点或分支结点。除根结点以外,分支结点也称为内部结点。树的度是树内各节点的度的最大值。 层次与深度 结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。若某结点在第一层,则其子树的根就在l+1层。其双亲在同一层的结点互为堂兄弟。显然图中的D、E、F是堂兄弟,而G、H、I、J也是。树中结点的最大层次称为树的深度(Depth)或高度,当前树的深度为4。 有序与无序树 如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。 森林 森林(Forest)是m(m≥0)棵互不相交的树的集合。 树的存储结构 简单的顺序存储不能满足树的实现。 结合顺序存储和链式存储来实现。 三种表示方法 1、双亲表示法 在每个结点中,附设一个指示器指示其双亲结点到链表中的位置。 2

DOM 事件模型

大城市里の小女人 提交于 2020-02-02 05:56:53
事件 HTML元素事件是浏览器内在自动产生的,当有事件发生时html元素会向外界(这里主要指元素事件的订阅者)发出各种事件,如click,onmouseover,onmouseout等等。 DOM事件流 DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。 主流浏览器的事件模型 早在2004前在HTML元素事件的订阅,发送,传播,处理模型上各浏览器实现并不一致,直到DOM Level3中规定后,多数主流浏览器才陆陆续续支持DOM标准的事件处理模型 — 捕获型与冒泡型。 目前除IE浏览器外,其它主流的Firefox, Opera, Safari都支持标准的DOM事件处理模型。IE仍然使用自己的模型,即冒泡型,它模型的一部份被DOM采用,这点对于开发者来说也是有好处的,只使用DOM标准,IE都共有的事件处理方式才能有效的跨浏览器。 冒泡型事件(Bubbling) 这是IE浏览器对事件模型的实现,也是最容易理解的,至少笔者觉得比较符合实际的。冒泡,顾名思义,事件像个水中的气泡一样一直往上冒,直到顶端。从DOM树型结构上理解,就是事件由叶子结点沿祖先结点一直向上传递直到根结点

数据结构经典十套卷之六

狂风中的少年 提交于 2020-02-02 03:51:13
一、选择题 (30 分 ) 1 . 设一组权值集合 W={2 , 3 , 4 , 5 , 6} ,则由该权值集合构造的 哈夫曼树中带权路径长度之和 为( )。 (A)20 (B) 30 (C) 40 (D) 45 2 .执行一趟 快速排序 能够得到的序列是( )。 (A)[41 , 12 , 34 , 45 , 27] 55 [72 , 63] (B)[45 , 34 , 12 , 41] 55 [72 , 63 , 27] (C)[63 , 12 , 34 , 45 , 27] 55 [41 , 72] (D)[12 , 27 , 45 , 41] 55 [34 , 63 , 72] 3 .设一条单链表的头指针变量为 head 且该链表没有头结点,则其判空条件是( )。 (A) head==0 (B) head->next==0 (C)head->next==head (D)head!=0 4 .时间复杂度不受数据初始状态影响而恒为 O(nlog2n) 的是( )。 (A) 堆排序 (B) 冒泡排序 (C) 希尔排序 (D) 快速排序 5 . 设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是( )。 解: DLR LRD (A) 空或只有一个结点 (B) 高度等于其结点数 (C) 任一结点无左孩子 (D) 任一结点无右孩子 6 .