zoukankan      html  css  js  c++  java
  • 树是一种抽象数据类型(ADT)或是实作这种抽象类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。

    树的特点

    1.每个节点有零个或多个子节点;

    2.没有父节点的节点成为根节点;

    3.每一个非根节点有且只有一个父节点;

    4.除了根节点外,每个子节点可以分为多个不相交的子树。

    树的分类

    无序树:树中任意节点的子节点之间没有顺序关系,这种树成为无序树,也称为自由树;

    有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;

    有序树分为

    一、二叉树:每个节点最多含有两个子树的树,称为二叉树;

    二叉树分为:

    1.完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其他各层节点数目均已经达到最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树称为完全二叉树

    满二叉树:在完全二叉树的基础上,第d层的节点数目也达到最大值。

    2.平衡二叉树(AVL树):当且仅当任意节点的两颗子树的高度差不大于1的二叉树;

    3.排序二叉树(二叉查找树):也成为二叉搜索树、有序二叉树;

    二、霍夫曼树(用于信息编码):带权路径最短的二叉树称为霍夫曼树或最优二叉树;(压缩技术也使用到了霍夫曼树)

    三、B树(B++树):一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树

    树的存储

    顺序存储:将数据结构存储在固定的数组中,虽然在遍历速度上有一定优势,但因为所占空间比较大,是非主流二叉树。

    链式存储:是主流的二叉树存储方式,缺陷究竟是指针或指针个数不定(即子节点数不确定),解决方案:把多叉树转成二叉树。

    树的应用场景(一般不用来存数据,而是用来辅助计算)

    1.xml,html等,编写这些东西的解析器的时候,不可避免用到树,比如html为根节点,下面两个子节点是head和body,其中head这个节点下面又分出两个节点meta和title,body下面分出多个节点,比如h1标签,h2标签,ul标签等。

    2.路由协议(路由的转发)是使用了树的算法

    3.mysql 数据库索引使用的是B++树的结构去存储

    4.文件系统的目录结构

    5.AI算法其实就是树搜索,机器学习中的decision tree也是树结构,类似人脑,去买东西,分为去楼下买东西和去超市买东西,去超市买东西下一步又分为打滴滴去买和坐公交去买

  • 相关阅读:
    KMP算法
    快速排序的三种分区方法
    广义表
    外部排序(败者树、置换-选择排序、最佳归并树)
    内部排序
    散列表
    B树和B+树
    查找(顺序、折半、分块)
    关键路径
    拓扑排序
  • 原文地址:https://www.cnblogs.com/yungiu/p/10175369.html
Copyright © 2011-2022 走看看