数据结构 树(Tree)的基本知识

树形结构的基本概念

  • 节点(node): 树上的每一个元素都是节点
  • 根节点: 一棵树最顶端的节点称为根节点
    • 每棵树最多有一个根节点
    • 空树没有根节点
  • 父节点: 与一个节点直接连接,并且在它的头上的节点即是它的父节点
  • 子节点: 与一个节点直接连接,并且在它的底下的节点即是它的子节点
  • 兄弟节点: 与同一个父节点直接连接的所有节点都是兄弟节点
  • 节点的度(degree): 一个节点的子树的个数称为该节点的度
    • 一个节点底下伸出几个子节点,该节点的度就为几
  • 叶子节点(leaf): 没有伸出任何子节点的节点即为叶子节点
    • 叶子节点的度为0
  • 非叶子节点: 至少有一个子节点的节点即是非叶子节点
    • 非叶子节点的度不为0
  • 空树: 没有任何节点的树叫做空树
  • 子树: 分为左子树和右子树
    • 左子树: 以左子节点为根节点形成的树称为左子树
    • 右子树: 以右子节点为根节点形成的树称为右子树
  • 树的度: 树中所有的节点的度中,最大值的度即为树的度
  • 层数(level): 根节点所在的层数为第1层,根节点的子节点在第2层,依次类推(有的教程是从第0层开始计算)
  • 节点的深度(depth): 从根节点到当前节点的简单路径上的节点总数即为节点的深度
  • 节点的高度(height): 从当前节点到最远叶子节点的简单路径上的节点总数即为节点的高度
  • 树的高度: 所有节点高度中的最大值,根节点到最远叶子节点的节点个数
  • 树的深度: 所有节点中深度的最大值,同样也是根节点到最远叶子节点的节点个数
    • 树的高度等于树的深度
  • 有序树(常用): 树中的任意节点的子节点之间有顺序关系,所以不能调换兄弟节点的位置. (对节点进行了排序的树)
  • 无序树: 树的任意节点的子节点之间没有顺序关系

二叉树(Binary Tree)

  • 二叉树的特点:
    1. 所有节点的最大的度为2(即最多拥有2棵子树)
    2. 左子树和右子树是有顺序的,不能交换左子树和右子树的位置
    3. 即使某节点只有一棵子树,也要区分该子树是左子树还是右子树
  • 二叉树的性质
    1. 非空二叉树的第i层,最多有2^(i-1)个节点(i>=1)
    2. 在高度为h的二叉树上最多有2^h - 1个节点(h>=1)
    3. 对于任意一棵非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,则有: n0=n2+1 (考虑证明方式)

真二叉树(Proper Binary Tree) 

  • 真二叉树: 所有的节点的度要么是2,要么是0,度不能为1

满二叉树(Full Binary Tree)

  • 所有的节点的度要么是2,要么是0,且所有的叶子节点都在最后一层(即每层节点都满排布)

  满二叉树的特点:
        满二叉树一定是真二叉树,但是真二叉树不一定是满二叉树
        假设满二叉树的高度和h(h>=1),那么
        1, 第i层的节点数: 2^(i-1)
        2, 叶子节点的数量: 2^(h-1)
        3, 总节点的个数 n = 2^h - 1 (推论: 满二叉树的高度: h= log2(n+1))

完全二叉树(Complete Binary Tree)

  • 叶子节点只会出现在最后2层,且最后1层的叶子节点都是靠左对齐

 完全二叉数的特点:
    1,完全二叉树的节点从上到下,从左到右依次满排布(伪满二叉树),如果排布满了就是满二叉树
    2,完全二叉树从根节点到倒数第2层的所有节点组成的树是一棵满二叉树
    3,满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树
完全二叉树的性质:
    1,度为1的节点的子树只能是左子树不能是右子树
    2,度为1的节点要么是1个,要么是0个
    3,同样节点数量的二叉树,完全二叉树的高度最小
    4,假如完全二叉树的高度为h(h>=1),那么最少有 2^(h-1)个节点,最多有2^h -1个节点
    5,完全二叉树的总结点数量为n,高度为h,那么2^(h-1)<= n < 2^h 取对数之后:h-1<= log2(n) < h
        可推导出: log2(n)< h <= log2(n)+1,又由于h为整数
        可推导出: h = floor(log2(n))+1  注意: floor()向下取整, ceiling向上取整

证明: 如果完全二叉树的总结点是n, 当 n为偶数时, 叶子节点数量 n0 = n /2 , 当n为奇数时, 叶子节点数量 n0 = (n + 1) / 2  

二叉查找树(Binary Search Tree) (二叉搜索树)

二叉查找树的特点:
    1,每一个节点最多有两个子节点(满足二叉树特点)
    2,任何一个节点的左子节点都比自己小,右子节点都比自己大
    3,任何一个节点的左右子树都是二叉搜索树
二叉查找树存储的元素必须具备可比较性:
    1,自定义类型必须指定比较方式,不允许为null(null类型没法比较)

平衡二叉树

平衡二叉树的特点:
    1,二叉树的左子树和右子树高度差不超过1
    2,任意节点的左子树和右子树都是一棵平衡二叉树

红黑树(平衡二叉B树)

  • 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构,红黑树不是高度平衡的,它的平衡是通过"红黑规则"实现的

红黑树和平衡二叉树之间的区别:
    平衡二叉树是高度平衡的,当平衡二叉树的左子树和右子树高度差超过1时,就会通过旋转来达到再次平衡
    红黑树不是高度平衡的,只有当不满足"红黑规则"时才会旋转

  • 红黑规则

 1,每一个节点要么是红色要么是黑色的
 2,根节点必须是黑色的
 3,如果一个节点没有子节点,则该节点里面的指向子节点的指针属性值为Nil,这个Nil视为叶子节点,每个叶子节点(Nil)是黑色的
 4,如果某一个节点是红色的,那么它的子节点必须是黑色的(即不能出现两个红色节点相连接的情况)
 5,对于每一个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值