12 - 树-基础知识-二叉树-彻底二叉树-斜树

[toc]数据结构

1 树

        树在数据结构中属于一种非线性结构,每一个元素能够有多个前驱和后继,它有以下定义:
树是n(n≥0)个元素的集合:spa

  • n = 0 时,成为空树
  • 树只有一个特殊的没有前驱的元素,称为数的根Root
  • 树中除了根节点外,其他元素只能有一个前驱,能够有零个或者多个后继

递归定义:3d

  • 树T是n(n≥0)个元素的集合。n = 0 时,成为空树
  • 有且只有一个特殊元素根,剩余元素均可以被划分为m个互不相交的集合T1,T2,...,Tm,而每个集合都是树,成为T的子树Subtree
  • 子树也有本身的根

2 树的概念

树是一个中很是抽象的概念,下面主要介绍树中各类名词的含义:code

名称 含义
节点 数中的数据元素
数的度 树内各节点的度的最大值
节点的度(degree) 节点拥有的子树的数目成为度,记做d(v)
叶子节点 节点的度数为0,成为叶子节点leaf、终端节点、末端节点
分支节点 节点度数不为0,成为非终端节点或分支节点
分支 节点之间的关系
内部节点 除根节点外的分支节点,固然也不包括叶子节点
孩子(儿子Child)节点 节点的子树的根节点成为该节点的孩子
双亲(父Parent)节点 一个节点是它各个树的根节点的双亲
兄弟(Sibling)节点 具备相同双亲节点的节点
祖先节点 从根节点到该节点所经分支上全部的节点。
子孙节点 节点的全部子树上的节点都成为该节点的子孙。
节点的层次(Level) 根节点为第一层,根的孩子为第二层,依次类推记做(Lv)
树的深度(高度Depth) 树的层次的最大值
堂兄弟 双亲在同一层的节点
有序树 结点的子树是有顺序的(兄弟有大小,有前后次序),不能交换
无序数 结点的子树是无序的,能够交换
路径 树中的k个节点n一、n二、...nk,知足ni是n(i+1)的双亲,成为n1到nk的一条路径。就是一条线串下来的,前一个都是后一个父(前驱)节点。
森林 m(m≥0)课不相交的树的集合,对于节点而言,其子树的集合就是森林。

shu

3 树的特色

下面咱们来总结一下书的特色:blog

  1. 惟一的根
  2. 子树不相交
  3. 除了根之外,每一个元素只能有一个前驱,能够有零个或多个后继
  4. 根节点没有双亲节点(前驱),叶子节点没有孩子节点(后继)
  5. vi是vj的双亲,则L(vi) = L(vj) - 1 ,也就是说双亲比孩子节点的层次小1

堂兄弟的双亲是兄弟关系吗?递归

  1. 堂兄弟定义是:双亲节点在同一层的节点
  2. 右图G和J是堂兄弟,由于它们的双亲节点D和E在第三层,依然是堂兄弟
  3. 所以,堂兄弟的双亲不必定是兄弟关系

4 二叉树

二叉树是一种特别的数,它有以下特色:hash

  • 每一个节点最多2课子树,即二叉树不存在度数大于2的节点
  • 它是有序树、左子树、右子树是顺序的,不能交换次序
  • 即便某一个节点只有一颗子树,也要肯定它是左子树仍是右子树

二叉树的五种基本形态:table

  1. 空二叉树
  2. 只有一个根节点
  3. 根节点只有左子树
  4. 根节点只有右子树
  5. 根节点有左子树和右子树

4.1 斜树

分为左斜树和右斜树:二叉树

  • 左斜树:全部节点都只有左子树
  • 右斜树:全部节点都只有右子树

xieshu

4.2 满二叉树

满二叉树有以下特色:终端

  1. 一课二叉树的全部分支结构都存在左子树和右子树,而且全部叶子节点只存在在最下面一层。
  2. 一样深度二叉树中,满二叉树的节点最多
  3. K为深度(1≤k≤n),则节点总数为2^k - 1
  4. 下面是一个深度为4的15个节点的满二叉树

manerchashu

4.3 彻底二叉树

彻底二叉树的特色:

  1. 若二叉树的深度为k,二叉树的层数从1到k-1层的节点数都达到了最大个数,在第k层的全部节点都集中在最左边,这就是彻底二叉树
  2. 彻底二叉数由满二叉树引出
  3. 满二叉树必定是彻底二叉树,但彻底二叉树不是满二叉树
  4. k为深度(1≤k≤n),则节点总数的最大值为2^k - 1,当达到最大值的时候就是满二叉树
  5. 下面是一个深度为4的彻底二叉树

wanquanerchashu
wanquanerchashu

注意:彻底二叉树K层节点都靠左排列,不然不能称为彻底二叉树

4.4 二叉树的性质

下面列举一些二叉树的特性,

4.4.1 性质1

在二叉树的第i层上至多有2^(i-1)个节点(i≥1)
xingzhi1

以上图为例当i等于4时,那么第4层最多含有2^(4-1),也就是8个元素

4.4.2 性质2

深度为k的二叉树,至多有2^k - 1 个节点(k≥1)

4.4.3 性质3

对任何一颗二叉树T,若是其终端节点为n0,度数为2的节点为n2,则有n0 = n2 + 1。换一句话说,就是叶子节点数-1就等于度数为2的节点数
证实:

  1. 总结点数为n=n0+n1+n2,n1是度数为1的节点总数。
  2. 一棵树的分支节点为n-1,由于除了根节点外,其他节点都有一个分支,即n0+n1+n2-1
  3. 分支数还等于n00+n11+n22,n2是2分支节点因此乘以2,2m2+n1
  4. 可得2*n2+n1=N0+n1+n2-1 ==> n2=n0-1

4.4.4 性质4

具备n个节点的彻底二叉树的深度为int(log2n) + 1 或者math.ceil(log2(n+1))

4.4.5 性质5

若是有一颗n个节点的彻底二叉树(深度为性质4)

xingzhi4

  • 若是i=1,则节点i是二叉树的根,无双亲;若是i>1,则其双亲是int(i/2),向下取整。就是子节点的编号整出2获得的就是父结点的编号。父节点若是是i,那么左孩子为2i,右孩子节点就是2i+1。
  • 若是2i>n,则节点i无左孩子,即节点i为叶子节点;不然其左孩子节点存在编号为2i。
  • 若是2i+1>n,则节点i无右孩子,注意这里并不能说明节点i没有左孩子;不然右孩子节点存在编号为2i+1.

4.4.6 其余性质

  1. 高度为k的二叉树,至少有k个节点。
  2. 含有n(n≥1)的节点的二叉树高度至多为n。
  3. 含有n(n≥1)的节点的二叉树的高度至多为n,最小为math(log2(n+1)),不小于对整数值的最小整数,向上取整。
  4. 假设告诉为h, 2^h-1=n ==> h=log2(n+1),层数是取整。若是是8个节点,3.1699就要向上取整为4,即4层
相关文章
相关标签/搜索