【tree】树

目录

  • 一、概述
    • 1.数据结构和算法
    • 2.树
  • 二、内容
    • 二叉树
    • 二叉查找树
    • AVL树
    • 红黑树
    • B树
    • B+树
    • 大顶堆或小顶堆
  • 三、产出


一、概述

1.数据结构和算法

什么是数据结构?数据之间的关系,或者说数据的组织结构。

数据之间的关系或组织结构,逻辑上分为线性、树、图和集合四种结构,在计算机上落地实现的时候需要借助于物理存储结构——顺序存储或链式存储。

物理结构:顺序存储或链式存储,每一种逻辑结构都可以借助于不同的物理存储结构来实现,例如链表一般借助于不需要连续内存的链式存储来实现,静态链表则借助于需要连续内存的数组来实现;常见的二叉树、自平衡二叉树等通常都借助于链式存储来实现,但是大顶堆或小顶堆则一般借助于数组来实现;Java的hashmap,逻辑结构是一个KV map,但是底层实现既有顺序存储也有链式存储。

逻辑结构

  • 线性:数据之间的关系是前驱和后继,常见链表、栈、队列、串
  • 树:节点之间是父、子、兄弟的层级关系,常见二叉树、二叉查找树、AVL、红黑树、B树、B+树、大顶堆或小顶堆
  • 图:图中的每一个顶点和其他顶点可以有任意关系,常见有向图和无向图
  • 集合:集合中的每一个元素和其他元素都没有关系,常见Set

什么是算法?解决问题的步骤,在数据结构中,即实现数据逻辑关系或组织结构的步骤。

一般从两个角度衡量算法的效率,即时间复杂度和空间复杂度,如果是排序算法,还要考虑排序算法的稳定性。

排序算法的稳定性:如果A=B,排序前A在B的前面,排序后A还在B的前面,那么就说这个排序算法是稳定的。

2.树

树是具有层级关系的节点的集合,节点之间是父、子、兄弟的层级关系。

节点的度和阶

  • 度:节点的度描述的是节点当前拥有的孩子数量;
  • 阶:节点的阶描述的是允许节点拥有孩子的最大数量;

举个例子:对于二叉树而言,一个节点最多允许拥有两个孩子,所以二叉树中每一个节点的阶都是2;但是对于某一个节点而言,该节点的度可以是0、1、2,如果是非叶子节点则度为1或2,如果是叶子节点,则度为0。

深度和高度:根深叶高

  • 深度:某一个节点的深度,是指根节点到该节点的边数或层次,树的深度是指根节点到叶节点的最大边数或层次;
  • 高度:某一个节点的高度,是指将该节点看作子树根节点到叶节点的最大边数或层次;
    • 树的高度值通常等于树的深度值,但是节点的深度值和高度值则通常不同,区别见下图;

特别的,数据结构中规定空树的高度为-1,由此可知:

  • 对于节点J而言,J本身就是一个叶子节点,所以子树J是一颗单节点子树,J到J自身的边数或层次为0,所以节点J的高度为0;
  • J节点的左右孩子都为null,空树的高度为-1,所以节点J的左右孩子的高度都为-1;

节点的深度和高度一定要讨论清楚,因为后面AVL树需要用到这些概念。


二、内容

  • :树是具有层级关系的节点的集合,节点之间是父、子、兄弟的层级关系;
  • 二叉树
    • 首先是一棵树
    • 其次对于树中的每一个节点,其最多有两个孩子,即节点的阶为2
  • 二叉查找树
    • 二叉查找树首先是一颗二叉树
    • 其次对于树中的任意一个节点,该节点的值大于左孩子小于右孩子
  • AVL
    • AVL树属于自平衡二叉树
    • AVL树首先是一颗二叉查找树
    • 其次对于树中的任意一个节点,该节点左右孩子的高度差不大于1
    • AVL树通过左右孩子的高度差来保证平衡
  • 红黑树
    • 红黑树和AVL树都属于自平衡二叉树
    • 红黑树首先是一颗二叉查找树
    • 其次对于树中的任意一个节点,都具有以下五种性质:
      • 不是红色就是黑色
      • 如果是根节点,则是黑色
      • 如果是叶节点,则是黑色(页节点是NIL节点)
      • 如果该节点是红色,则它的两个孩子都是黑色
      • 每个节点的深度路径上都包含相同数量的黑色节点
    • 红黑树通过节点的颜色数量来保证平衡
  • B树
    • B树属于自平衡多路查找树
    • 高扇出
    • 所有的叶节点都在同一层级,即叶节点的深度都相同
    • B树通过叶节点都在同一层级来保证平衡
  • B+树
    • AVL、红黑树、B树和B+树都属于自平衡树,不过AVL和红黑树最多只有两个孩子,属于自平衡二叉树,而B树和B+树是高扇出允许有多个孩子,属于自平衡多路查找树
    • 高扇出
    • 分为叶节点和索引节点,叶节点包含所有的数据,索引节点只包含索引值不包含数据
    • 所有的叶节点都在同一层级,且组织成一条双向链表
    • B+树通过叶节点都在同一层级来保证平衡
  • 大顶堆或小顶堆
    • 注意:以上一般都是通过链式存储来实现树结构,但是大顶堆或小顶堆则是通过顺序存储来实现树的层次结构(当然也可以通过链式存储来实现,不过会更复杂),所以作为一个补充来提及;
    • 如果是大顶堆,则根节点是最大值;如果是小顶堆,则根节点是最小值;
    • 对于大顶堆中的任意节点,该节点的值大于左右孩子,不要求左孩子小于右孩子,只要求父节点的值大于两个孩子;
    • 对于小顶堆中的任意节点,该节点的值小于左右孩子,不要求左孩子小于右孩子,只要求父节点的值小于两个孩子;


三、产出


参考资料:

  • 《算法导论》
  • 《数据结构与算法分析:Java语言描述》
  • 《大话数据结构》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值