浅谈数和二叉树

:非线性结构。一对多的关系。

根节点:没有前驱节点的节点。

叶子节点:没有后继节点的节点。

节点的度:一个节点的子节点个数。

树的度:树中度最大的节点的度。

树的节点个数计算:

满树:一棵度为n,高度为h的满树,其节点个数是:

n^0 + n^1 + n^2 + .......+ n^(n-1)  等比公式

总结点树和叶子节点数的计算:

度  个数

1   n1

2   n2

...    ...

d     nd

n总 = n1 + 2n2  + 3n3 +.... +d*nd -1

n0 = n总 - (n1 + n2 +n3+.....+nd)

n0 = (1-1)*n1  + (2-1)*n2 +(3-1)*n3 +....+(d-1)*nd + 1        这是树的叶子节点计算公式

度为d,高度为h的树,最多可容纳多少节点:d^0 + d^1 +d^2 +...+d^(n-1)

树的存储结构:(链表特点)

  typedef struct TREE_NODE{      //这种普通树不好操作或者极大的浪费空间

    void *data;        //所以二叉树用的比普通树更广泛

    struct TREE_NODE **children;   //指向子节点的指针数组,动态数组

    int   childrenCount;

    }TREE_NODE;

上面的存储结构存在两个大的缺陷:1,存储利用率低,

                2,节点操作复杂。

其实,可以用“线性存储结构”,表达树:即,用数组存储节点及数据“

  typedef  struct TREE_NODE{

    void *data;

    int parentIndex;    //父节点下标;

  } TREE_NODE;

 树的遍历:

  队列:

  是一种线性结构;具有两个数据操作端,且,总是从一端入;从另一端出;入的端是队尾,出的端是队首。

  广度优先遍历:优先将一个节点的所有子节点全部访问完。需要队列的支持。

  1.根节点入队列

  2.while(队列非空){

      3.出队列;

      4.访问(输出)

      5.将这个节点的所有子节点入队列

  }

  深度优先遍历:

  工具:堆栈

二叉树:二叉树有且仅有一个根节点。

二叉树不同于树的关键定义是:任何一个非叶子节点有最多两个子节点,且,严格区分左右孩子

满二叉树:一棵高度为h的满二叉树的节点总数,一定是2^h - 1个!

满二叉树的第h层的节点总数是:2^(h - 1)

拥有n个节点的满二叉树的高度:最多是[log2(n)],  

对于二叉树:n0 = n2 + 1

1.完全二叉树可以用一维数组存储和表示

2.若一棵完全二叉树的某节点存在子节点,那么,该节点编号与其左右孩子节点编号存在下列关系

i   leftChild   : 2*i + 1

   rightChild:   2*i + 2

3.一棵拥有n个节点的完全二叉树,其最后一个(编号最大)非叶子结点的编号是

    n / 2-1

4.一棵拥有n个节点的完全二叉树的最后一个非叶子节点,要么有左右孩子,要么只有左孩子!

5.一棵拥有n(n为偶数)个节点的完全二叉树,其最底层叶子节点个数一定是奇数个

      个数为in0= n / 2    (满二叉树总节点数总是偶数个,而n为偶数)

原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9107406.html

时间: 2024-10-10 01:00:47

浅谈数和二叉树的相关文章

浅谈数据结构之二叉树存储结构实现(七)

树:是n个结点的有限集:n=0时称为空树.在任意一棵非空树中,有且只有一个特定的结点称为根结点:其余的结点可分为m(m>0)个互不相交的有限集,其中每一个有限集都是一棵子树.结点拥有的子树数称为结点的度:度为0的结点称为叶结点或者终端结点,度不为0的结点称为分支结点或者非终端结点:树的度就是树内各结点的度的最大值. 二叉树的特点有:(1).每个结点最多有两棵子树,所以二叉树不存在度大于2的结点(注意:不是只有两棵子树,而是最多有两棵子树,没有子树或者有一颗子树都是可以的);(2).左子树和右子树

浅谈数通畅联ECP与EAC的区别

最近收到很多客户的提问,AEAI ECP企业云联平台是什么产品?为什么AEAI ECP中包括集成套件?EAC也是数通畅联的产品吗?同样涉及集成两者有什么区别呢?诸如此类的问题还有很多. 其实AEAI ECP与EAC是两种不同的模式,一个为实际产品,一个以方案形式在项目中实现,两者在联系中存在着区别,为了使关注数通畅联动态的朋友能更好的区分它们,下面小编就为大家详细介绍下二者的区别. 注意:本文中假定读者已经了解沈阳数通畅联软件技术有限公司的基本情况,以及对文章中涉及的SOA综合集成项目.AEAI

浅谈数据结构-二叉树

浅谈数据结构-二叉树 二叉树是树的特殊一种,具有如下特点:1.每个结点最多有两颗子树,结点的度最大为2.2.左子树和右子树是有顺序的,次序不能颠倒.3.即使某结点只有一个子树,也要区分左右子树. 一.特殊的二叉树及特点 1.斜树 所有的结点都只有左子树(左斜树),或者只有右子树(右斜树).这就是斜树,应用较少 2.满二叉树 所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树.就是完美圆满的意思,关键在于树的平衡. 根据满二叉树的定义,得到其特点为: 叶子只能出现

浅谈MySQL索引背后的数据结构及算法

摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是 平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章主要内容分为四个部分. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. 第二部分结合MySQL数据库中

浅谈数据结构-树

树是一种数据结构,其中一个元素可以有两个或者多个数据元素,具有一对多的特点,用树结构来存储文件. 树的概念 结点的度:子结点的个数.例如结点1中有3个子结点,结点1的度是3. 树的度:树的度等于所有结点度中度最高的值.结点最高的度为3,树的度为3. 叶子结点:度为0的结点,即没有子结点的结点.例如:上图中3,5,6,7,9,10. 分支结点:除了叶子结点以外的结点,即度不为0的结点.例如:上面树的分支结点为1,2,4,8. 内部结点:除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点.例如

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

本文转载自:http://www.cnblogs.com/kenkofox/p/4643760.html 心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳

浅谈结对编程

浅谈结对编程 结对编程 结对编程,是一种敏捷软件开发的方法,极限编程的组成部分.结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计.同一个算法.同一段代码或同一组测试.一人充当“执行”角色,只负责编程.另外则负责“观察者”(或“导航”),检测bug和把控整体设计.两个程序员具有相同的缺点和盲点的可能性很小,所以当我们采用结对编程的时候会获得一个强大的解决方案.而这个解决方案恰恰是其它软件工程方法学中所没有的. 由于自己长时间都习惯了一个人编程,所以在这次结对编程的初期在做项目的