树结构

树( Tree):n(n≥O) 个结点的有限集。(只有一个根节点,子集互不相交)

节点的度(Degree):节点拥有的子节点数(树的degree = max(各子节点的degree))

叶(leaf):degree = 0

树的深度(Depth):节点的最大层次

树的表示:

  双亲表示法:各节点存在一个指针指向其双亲。

  孩子表示法:节点存在degree个指针指向其子树根元素。

  孩子兄弟表示法:节点存在一个指向其同层下一个兄弟节点的指针和它的左侧第一个子节点的指针。(表示为二叉树Binary Tree)

二叉树(Binary Tree):每个节点max(degree ) = 2 ;左子树和右子树有序。

斜树:只有左子树或只有右子树(线性表是一种特例)

满二叉树:所有内部节点degree=2,所有leaf在同一层(只能是最下层)

满二叉树的特点:

  ( 1 ) 叶子只能出现在最下一层。

  ( 2 ) 非叶子结点的度一定是2 。

  ( 3 ) 在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。

完全二叉树:对一棵具有n 个结点的二叉树按层序编号,编号为i (1<i<n) 的结点与同样深度的满二叉树中编号为i 的结点在二叉树中位置完全相同

完全二叉树的特点:

  ( 1 ) 叶子结点只能出现在最下两层。

  ( 2 ) 最下层的叶子一定集中在左部连续位置。

  ( 3 ) 倒数二层,若有叶子结点,一定都在右部连续位置。

  ( 4 ) 如果结点度为1 ,则该结点只有左孩子,即不存在只有右子树的情况。

  ( 5 ) 同样结点数的二叉树,完全二叉树的深度最小。

二叉树的性质:

  1.深度为k的二叉树第k层最多有(2k-1)个节点。(等比数列第n项)

  2.深度为k的二叉树最多有(2k-1)个节点。(等比数列前n项和)

  3.二叉树的leaf节点数n0和degree=2的节点数n2有关系:n0=n2+1(总节点数:n=n0+n1+n2;总度数(总分支数):0*n0+1*n1+2*n2=n-1)

  4.节点数为n的完全二叉树的深度:k=log2n+1(根据满二叉树计算公式推得:2k-1-1<n<=2k-1 》》 2k-1<=n<2k 》》 k-1<=log2n<k 》》 k=log2n+1)

huffman树:

时间: 2024-12-29 23:15:34

树结构的相关文章

树结构在程序设计中的运用

                                                                                引言 近年来,由于各种竞赛纷纷采用free-pascal,因此对于算法来说,空间效率上的要求降低了,而对时间效率却提出了更高的要求.这使得选手不仅要娴熟地掌握常规算法,而且要大胆创新,构造更高效的算法来解决问题. 在以往的程序设计中,链式结构采用得较多.的确链式结构有编程复杂度低.简单易懂等优点,但有一个致命的弱点:相邻的两个元素间的联系

oracle分层查询中的start with和connect by(树结构查询)

来源:  http://blog.csdn.net/itmyhome1990/article/details/16338637 ORACLE是一个关系数据库管理系统,它用表的形式组织数据,在某些表中的数据还呈现出树型 结构的联系. 例如有如下案例: 数据为节选,字段值含义分别为税务机构代码.税务机构名称.上级税务机构代码,税务机构级别 select * from extern_dm_swjg查询的时候默认顺序就是上面的顺序,可以看出是混乱的并没有特殊结构特征. 而希望的结果如下图: sj_swj

第一章: 在RDB中的树结构数据

第一章: 在RDB中的树结构数据 在本章中,我将写一个基本的知识来理解这个问题 一  模型的作用 RBD处理树模型的作用总结为两点: 1  在RDB表中保存树的数据 2  效率的查询节点的相关节点 1  在RDB表中保存树的数据 我们可以定义的标准,该模型是否具有存储层次数据的功能 可以由保存的所有节点再现原有的层次结构 如果不能通过保存的数据再现原有的树结构,就不能说这个模型实现了树. 2  效率的查询节点的相关节点 通常,我们将数据保存到数据库中进行搜索,数据中保存了分层数据,可能会查询任何

用dfs序维护树结构

给定一棵n个节点的树,m次查询,每次查询需要求出某个节点深度为h的所有子节点. 对于这个问题如果试图去对每个节点保存所有深度的子节点,在数据大的时候内存会吃不消:或者每次查询的时候去遍历一遍,当数据大的时候,时间效率会非常低. 此时如果使用dfs序维护树结构就可以轻松地解决这个问题. 作为预处理,首先将将树的所有节点按深度保存起来,每个深度的所有节点用一个线性结构保存,每个深度的节点相对顺序要和前序遍历一致. 然后从树的根节点进行dfs,对于每个节点记录两个信息,一个是dfs进入该节点的时间戳i

索引深入浅出:非聚集索引的B树结构在聚集表

一个表只能有一个聚集索引,数据行以此聚集索引的顺序进行存储,一个表却能有多个非聚集索引.我们已经讨论了聚集索引的结构,这篇我们会看下非聚集索引结构. 非聚集索引的逻辑呈现 简单来说,非聚集索引是表的子集.当我们定义了一个非聚集索引时,SQL Server把整套非聚集索引键存在不同的页里.我们来看下一个包含BusinessEntityID(PK),PersonType,FirstName,LastName这4列的表,这个表上有一个非聚集索引定义.主体表按BusinessEntityID列(聚集索引

一行python代码实现树结构

树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用.一颗树可以简单的表示为根, 左子树, 右子树. 而左子树和右子树又可以有自己的子树.这似乎是一种比较复杂的数据结构,那么真的能像我们在标题中所说的那样,用一行Python代码就可以实现吗? 一行代码实现? 由于树形结构的外层和内层有着相似的结构,所以多可以用递归的方式定义树.再利用Python中提供的defaultdict,我们就可以很轻松地定义树了,而且只有一行代码. from collections import defaultd

asp.net mvc+EF 递归生成树结构返回json

0.数据表结构,主要属性有:Id.parentId(父节Id).Text.Url……等等. 1.新建一个树结构MenuModels 1 public class MenuModels 2 { 3 private int _id; 4 private string _text; 5 private int? _parentid; 6 private string _icon; 7 private string _url; 8 private object _menus; 9 private Dic

react+redux教程(五)异步、单一state树结构、componentWillReceiveProps

教程目录 react+redux教程(一)connect.applyMiddleware.thunk.webpackHotMiddleware react+redux教程(二)redux的单一状态树完全替代了react的状态机? react+redux教程(三)reduce().filter().map().some().every()....展开属性 react+redux教程(四)undo.devtools.router react+redux教程(五)异步.单一state树结构.compo

Android应用源代码ListView实现的文件夹树结构

Android应用源代码ListView实现的文件夹树结构 点击加号能够展开,点击减号能够收起这一个节点 源代码下载地址:http://download.csdn.net/detail/kiduo08/7711711

数据结构编程实验——chapter8-采用树结构的非线性表编程

关于树结构的非线性表编程在数据结构中可以说占据了半壁江山,其中涉及的知识点繁杂,但也是数据结构体现运算优化的核心所在,下面我们将较为初步且系统得讨论数据结构中一系列有关树的表示. 首先我们再次明确树的形式化概念: 树是n个节点的有限集合,这个集合满足以下的条件: 1)     有且仅有一个节点没有前件. 2)     除根外,其他的所有节点都有且仅有一个前件. 3)     除去根以外,其他每个节点都通过唯一的路径连接根上.每个节点的前件称为该节点的父节点,后件称为该节点的子节点. 这篇文章主要