树和二叉树都有一个树字,从结构上来说,都是树状结构,但是它们之间的区别是什么呢?那就拿两者的特点来说一说把。
首先是 树
先看一下树的基本概念和它的一些术语:
Root:根节点。 描述:树的顶部节点。
Child:子节点。 描述:离开根节点时直接连接到另一个节点的节点。
Leaf :叶子节点。 描述:没有子节点的节点
Edge : 边。 描述:一个节点与另一个节点之间的连接。
Path:路径。 描述:连接节点和子节点的节点和边序列。
Height:节点高度。 描述:节点的高度是指节点和叶节点之间最长路径上的边数。
Level :层级。 描述:节点的级别由1 +(节点和根之间的连接数)定义。
Depth:深度。 描述:节点的深度是树的根节点到该节点的边数。
Degree:度。 描述:一个节点的子树的数目。
下面通过几个图解释树的几个比较重要的概念:
Edge、Root、Leaf
Path
Height
需要注意的是叶子节点的高度为0,如果树只有一个节点,那么这个节点的高也是0
Depth
需要注意的是根节点的深度(Depth)是0.
从Height和Depth的对比,它们的方向刚好是相反的。
对于Height和Depth不用死记,我们可以把树倒过来看,也就是我们现实生活当中的树,求某个节点的Height那肯定是从根部往上的方向;
如果是求某个节点的深度,方向肯定是向下的。
Level
节点的Level是从1开始的,Level = Depth+1,根节点的Level=1
也有很多书籍上Level是从0开始的,这样的话Level就等于Depth,根节点的Level=0
二叉树
二叉树的基本概念
就如我们以前介绍的线性表一样,一个没有限制的线性表应用范围可能有限,但是我们对线性表进行一些限制就可以衍生出非常有用的数据结构如栈、队列、优先队列等。
树也是一样,一个没有限制的树 由于太灵活,控制起来比较复杂。如果对普通的树加上一些人为的限制,比如节点只允许有两个子节点,这就是我们接下来要介绍的二叉树。
二叉树是一个每个最结最多只能有两个分支的树,左边的分支称之为左子树,右边的分支称之为右子树。
也就是说二叉树节点的度最大也就是2,而普通的树,节点的度是没有限制的。
二叉树的分类
完美/满二叉树(Perfect Binary Tree)
完美二叉树也有很多教材上称之为满二叉树。完美二叉树满足两个特性:
所有的节点都包含两个子节点
所有的叶子节点的Height或者Level都相等
例如下面就是一个完美二叉树:
完全二叉树(Complete Binary Tree)
完全二叉树是 除了最后一层都是满的(都有两个子节点),并且最后一层的节点是从左往右排列的。
完全二叉树,通俗点说就是节点按层从左往右排列。如果最后一层排满了就是完美二叉树,没有满则是完全二叉树。
所以完美二叉树一定是完全二叉树,完全二叉树不一定是完美二叉树。
一个完全二叉树可以高效的使用数组来表示。
例如下面就是一个完全二叉树:
完满二叉树(Full Binary Tree)
完满二叉树就简单了,就是每个节点都有两个子节点。也就是说它比完美二叉树少了一个条件。
例如下面就是一个完满二叉树:
满二叉树和完全二叉树的区别:
完全二叉zhi树是由满二叉树而引出来的。对于深度为K的,有n个结点的dao二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
对于满二叉树,除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。而完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
1.满二叉树
定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
2.完全二叉树
定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
满二叉树就是每个节点都有两个子节点,每层都是满满的,而完美二叉树就是不需要每层都是慢慢的,只要满足每个节点都有两个子节点即可。完全二叉树就是除了最底层以外,其它层都是节点下有两个子节点,并且最下层的子节点集中在左侧。
树和二叉树两者之间的区别:
一、性质不同
树:树是一种bai数据结du构。
二叉树:二叉树是每个结点最多有两个zhi子树的一种树结构dao。
二、结点不同
树:树的每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点。
二叉树:每个结点最多有两个子树。
三、种类不同
树:树的种类包括无序树、有序树、二叉树和霍夫曼树等。
二叉树:二叉树的种类包括完全二叉树、满二叉树和平衡二叉树。