zoukankan      html  css  js  c++  java
  • 12

    1 树

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

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

    递归定义:

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

    2 树的概念

    树是一个中非常抽象的概念,下面主要介绍树中各种名词的含义:

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

    shu

    3 树的特点

    下面我们来总结一下书的特点:

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

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

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

    4 二叉树

    二叉树是一种特别的数,它有如下特点:

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

    二叉树的五种基本形态:

    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层
  • 相关阅读:
    kubernetes-handbook 阅读笔记
    kubernetes-notes--阅读笔记
    SpringInAction4笔记——复习
    spring源码解析——2容器的基本实现(第2版笔记)
    把node加入master节点时,日志内容分析
    初始化master节点时,日志内容分析
    Mac OS用minikube安装单节点kubernetes
    Mac OS用vmvare安装多节点kubernetes
    FatMouse's Speed 基础DP
    FatMouse and Cheese 动态化搜索
  • 原文地址:https://www.cnblogs.com/dachenzi/p/10487402.html
Copyright © 2011-2022 走看看