叶子结点

二叉排序树的创建,遍历和删除

旧时模样 提交于 2019-11-28 17:45:39
Binary Sort/Search Tree 为什么会有它 数组 未排序:直接在队尾添加,速度快;查找速度慢。 排序:二分查找,查找速度快;添加新数据,需要找到插入位置移动后面的数组,速度慢 链表 添加快,查找慢; 简介 BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7,3, 10, 12, 5, 1, 9) ,对应的二叉排序树为: 创建二叉排序树 一个数组创建成对应的二叉排序树,并使用中序遍历二叉排序树,比如: 数组为 Array(7, 3, 10, 12, 5, 1, 9) ,创建成对应的二叉排序树。 创建思路: 插入一个节点 如果该节点的值小于根节点的值,此时需要判断根节点的左孩子是否为空,为空则插入该节点;不为空,则以左孩子为当前节点,递归进行添加 如果该节点的值大于根节点的值,此时需要判断根节点的右孩子是否为空,为空则插入该节点;不为空,则以右孩子为当前节点,递归进行添加 遍历思路:(中序)infixOrder 如果当前节点的左孩子不为空,就继续遍历直至为空; 先输出当前节点的值; 如果当先节点的右孩子不为空,就继续遍历直至为空。 删除思路: 分三种情况:

B树、B+树、红黑树

懵懂的女人 提交于 2019-11-28 16:13:51
https://blog.csdn.net/z_ryan/article/details/79685072 引言 我们都知道二叉查找树的查找的时间复杂度是O(log N),其查找效率已经足够高了,那为什么还有B树和B+树的出现呢?难道它两的时间复杂度比二叉查找树还小吗?   答案当然不是,B树和B+树的出现是因为另外一个问题,那就是磁盘IO;众所周知,IO操作的效率很低,那么,当在大量数据存储中,查询时我们不能一下子将所有数据加载到内存中,只能逐一加载磁盘页,每个磁盘页对应树的节点。造成大量磁盘IO操作(最坏情况下为树的高度)。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。   所以,我们为了减少磁盘IO的次数,就你必须降低树的深度,将“瘦高”的树变得“矮胖”。一个基本的想法就是:   (1)、每个节点存储多个元素   (2)、摒弃二叉树结构,采用多叉树 这样就引出来了一个新的查找树结构 ——多路查找树。 根据AVL给我们的启发,一颗平衡多路查找树(B~树)自然可以使得数据的查找效率保证在O(logN)这样的对数级别上。 下面来具体介绍一下B树(Balance Tree), B树 一个m阶的B树具有如下几个特征:B树中所有结点的孩子结点最大值称为B树的阶,通常用m表示。一个结点有k个孩子时,必有k-1个关键字才能将子树中所有关键字划分为k个子集。 1

数据结构知识点汇总

♀尐吖头ヾ 提交于 2019-11-28 16:12:35
1、用链表表示线性表的优点是(便于插入和删除操作) 2、单链表中,增加头结点的目的是(方便运算的实现) 3、栈和队列的共同特点是(只允许在端点处插入和删除元素) 4、栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5、队列具有(先进先出)的特征,栈具有(后进先出)的特征。 6、链表(插入和删除不需要移动元素,但是无法随机访问任一元素) 7、循环链表的主要优点是(从表中任一结点出发都能访问到整个链表) 8、线性表(除了第一个和最后一个元素外,其余每个元素都有一个直接前驱和直接后继) 9、线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构) 10、深度为5的满二叉树中,叶子结点的个数为(16)。 其共有(31)个结点。 设一棵完全二叉树共有699个结点。则该二叉树的叶子结点数为(350)个。 #完全二叉树总的结点数为N,若N为奇数,则叶子结点数为(N+1)/2;若N为偶数,则叶子结点数为N/2。 11、具有3个结点的二叉树有(5)种形态。 #高度为2层的是:根-左-右。高度为3层的是:根-左-左、根-左-右、根-右-右、根-右-左。 12、一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13)个。 #叶子结点数n0与度为2的结点数n2的关系是:n0=n2+1,所以度为2的结点个数为3-1=2。所以总的结点数为 n

数据结构之树

时光总嘲笑我的痴心妄想 提交于 2019-11-28 16:11:32
本篇只涉及树的概念范围和应考思路,不涉及具体结构或算法的实现与思考 1.树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: ①每个节点有零个或多个子节点; ②没有父节点的节点称为根节点; ③每一个非根节点有且只有一个父节点; ④除了根节点外,每个子节点可以分为多个不相交的子树; 然后你要知道一大堆关于树的术语:度,叶子节点,根节点,父节点,子节点,深度,高度。 二叉树 二叉树:每个节点最多含有两个子树的树称为二叉树。(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树。) 在二叉树的概念下又衍生出满二叉树和完全二叉树的概念 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上 完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。 算法实现(笑) 二叉树: private static class TreeNode {

数据结构和算法 (二)

不想你离开。 提交于 2019-11-28 13:48:24
数据结构(swift实现)一 1. 常用数据结构 1. 1 数组 1. 2 字典 1. 3 链表 1. 4 堆栈 1.4.1 堆 1.4.2 栈 1.5 队列 1.5.1 优先队列 1.5.2 循环队列 1.6 树 1.6.1 二叉树 1.6.2 二叉搜索树 1.6.3 平衡二叉树 1.7 图 2. 常用算法 2.1 查找算法 2.1.1 二分查找 2.1.2 广度优先搜索算法 2.1.3 深度优先搜索算法 2.2 排序算法 2.2.1 排序算法简介 2.2.2 排序算法比较 2.2.2.1 稳定性比较 2.2.2.2 时间复杂度比较 2.2.2.3 辅助空间比较 2.2.2.4 其他比较 2.2.3 排序算法实现 2.2.3.1 插入排序 2.2.3.2 选择排序 2.2.3.3 冒泡排序 2.2.3.4 快速排序 2.2.3.5 堆排序 2.2.3.6 归并排序 2.2.3.7 希尔排序 2.2.3.8 二叉树排序 2.2.3.9 计数排序 2.2.3.10 桶排序 2.2.3.11 基数排序 2.2.3.12 1. 常用数据结构 1. 1 数组 1. 2 字典 1. 3 链表 1. 4 堆栈 1.4.1 堆 1.4.2 栈 1.5 队列 1.5.1 优先队列 1.5.2 循环队列 1.6 树 1.6.1 二叉树 1.6.2 二叉搜索树 1.6.3 平衡二叉树 1.7 图 2.

树和二叉树

时间秒杀一切 提交于 2019-11-28 12:24:48
---恢复内容开始--- 树的逻辑结构表示有树形结构文氏图结构和凹入表示法和括号表示法 基本术语 结点的度:最大度 树的度:结点总度: 分支结点:有后继结点的结点 叶子结点:没有后继结点的结点 孩子结点:一个结点的后继结点 双亲结点:一个结点的前驱结点 子孙结点:一个结点的子树当中除去本身的结点 祖先结点:从树根结点到达某个结点经过的所有结点,不包括本身 兄弟结点: 结点层次:根节点为第一层 树的高:最大层次 森林:有零个或者多个不交错的树 性质: 树中的结点数=树的度+1 度为m的元素 第i层最多有m^(i-1)个结点 (满树的时候根节点有m度 第i-1有m^(i-1)度该度也就是第i层的结点数) m次树也就是最大度为m 但n个结点构造树 但为m次树或者接近满m次树的时候 树的高度层数最小 /* 高度为h的m次树最多有多少个结点? m+m^2+m^3+...+m^(h-1)总度数 再加上跟结点1 就是m的h-1次阶层 也就是m^0+m^1+m^2+m^3+...+m^(h-1) */ 因为树的结构为非线性结构因此树的运算较以前讨论的线性结构复杂 主要运算有: 寻找满足某种特定关系的结点 如寻找当前结点的双亲结点等等 插入或者删除某个结点 如在当前的结点上插入一个新的结点或者删除当前结点的第i个孩子结点等 遍历树中的每个结点 主要有先根遍历、后根遍历和层次遍历三种

词向量技术原理及应用详解(二)

感情迁移 提交于 2019-11-28 11:10:04
当前文本向量化主流的方式是word2vec词向量技术,从基于统计的方法,到基于神经网络的方法,掌握word2vec词向量技术是学习文本向量化的最好的方式 下面是Tomas MIkolov的三篇有关word embedding的文章: 1、Efficient Estimation of Word Representation in Vector Space, 2013 2、Distributed Representations of Sentences and Documents, 2014 3、Enriching Word Vectors with Subword Information, 2016 因此严格意义上说,word2vec是一个2013年出现的新方法,15年以后逐渐流行起来。 Word2vec的几个关键点 什么是word2vec? word2vec是词的一种表示,它将词以固定维数的向量表示出来。是用来将一个个的词变成词向量的工具。例如:“我爱中国”这句话通过分词为 我/ 爱/ 中国。那么这时候三个词都将表示为n维的词向量。中国 = [x1,x2,…,xn] 为什么要用word2vec?word2vec有什么好处。 传统的基于词袋模型 one-hot representation在判定同义词,相似句子的时候很无力。 例如在一个只有两个词的词典中。快递被编码为v1 = [0

20182330 第十周学习总结

自闭症网瘾萝莉.ら 提交于 2019-11-28 09:49:30
目录 20182330《程序设计与设计结构》 第十周学习总结 教材学习内容总结 周一: 树 二叉树 周三:遍历 周五:堆 教材学习中的问题和解决过程 左单旋 右单旋 双旋转 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 点评过的同学博客和代码 其他(感悟、思考等,可选) 学习进度条 参考资料 20182330《程序设计与设计结构》 第十周学习总结 教材学习内容总结 周一: 树 树的定义:树是有n个结点组成的有限集合 n=0,为空树 n》0,有特定节点为根 特点:非线性结构:一个前驱多个后继 。 其他(除根)到根的路径唯一 结点的度:结点的子树数 树的度:结点的最大度数 叶子:度为0 分支点:非终端结点 结点的层次:根为第一层 树的深度:结点的最大层次 有序树无序树 树和森林 树的基本操作 查找插入删除 traverse遍历 存储结构 双亲表示法 define M 100 class PTNode{ ElemType data; int parent} class tree { PTN items[M] int root; int n; 孩子表示法 多重链表 孩子链表(类似于链地址法) 双亲孩子表示法 结合1 2方法 孩子兄弟表示法(左孩子右兄弟) 二叉树 结点至多为2,子树有左右之分 第i层最多有2^(i-1)个结点 深度为k最多有2^K-1个

二叉树基础知识

非 Y 不嫁゛ 提交于 2019-11-28 05:55:32
二叉树基础知识 1. 树定义 树(Tree) 是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中: 1)有且仅有一个特定的称为根(Root)的结点; 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、......、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。 ​ 3)每一棵树有且只有一个根节点,子节点没有限制,但是每个节点都互不相交。 上图就是一个普通的数。 2. 树相关概念 ​ 2.1节点的度 ​ 节点的度就是节点拥有的子树的数目。上图A的节点的度为2。 ​ 2.2树的深度 ​ 树的深度就是树中节点的最大层次树。上图树的深度为4。 ​ 2.3节点关系 ​ 树只有一个根节点,其余的为树的孩子节点。分布在根节点的左边的节点称为左孩子,右边为右孩子,左右孩子在同一层次上称为兄弟节点。而根节点即为孩子节点的双亲节点。 3. 二叉树 ​ 二叉树定义 :二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。 以上即为一颗普通的二叉树。 二叉树特点 :1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。 2)左子树和右子树是有顺序的,次序不能任意颠倒。 3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。 二叉树性质 : 1

常见的查找算法(五):树表查找之一

牧云@^-^@ 提交于 2019-11-28 03:57:31
二叉查找树 ( 英语: Binary Search Tree),也称为 二叉搜索树 、 有序二叉树 ( ordered binary tree)或 排序二叉树 ( sorted binary tree),是指一棵空树或者具有下列性质的 二叉树 : 若任意节点的 左子树不空 ,则左子树上所有节点的值 均小于 它的根节点的值; 若任意节点的 右子树不空 ,则右子树上所有节点的值 均大于 它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有 键值 相等的节点。 二叉查找树的节点 : 1 //二叉树节点 2 static class BSTNode<T> { 3 T data; 4 BSTNode<T> parent; 5 BSTNode<T> left; 6 BSTNode<T> right; 7 8 public BSTNode() { 9 this.data = null; 10 this.left = left; 11 this.right= right; 12 } 13 14 public BSTNode(T data) { 15 this(data,null, null); 16 } 17 18 public BSTNode(T data, BSTNode<T> left, BSTNode<T> right) { 19 this.data = data; 20