zoukankan      html  css  js  c++  java
  • 树是数据结构中很重要的一环。工作中,也常常用到。

    树,是一种数据的表示结构,主要用于算法中的查找、排序。常常与指针联系在一起。

    树有许多种,读书的时候,印象中就是一大堆树,搞不清。现在梳理一下:


    0、二叉树

    1)非空二叉树只有一个根节点(空的话,一个节点也没有了,哪还是树吗?)

    2)每个节点至多两个子树,成为左、右子树


    满二叉树与完全二叉树是两种特殊的二叉树:


    1、满二叉树

    除了叶子结点,每个非叶子结点都有两个结点。


    2、完全二叉树

    除最后一层,每一层的结点都达到最大值,且最后一层只缺少右边的若干结点。完全二叉树就是最后一层的右叶子结点可能会残缺的二叉树。


    二叉树的遍历,按根结点遍历的顺序分为前序、中序、后序。


    3、二叉链表

    二叉树通常采用链式存储结构。二叉树每个结点的存储结构以由2部分组成:数据域与指针域。指针域有两个,分别指向左右子结点。因此二叉树的链式存储结构也成为二叉链表。


    4、穿线二叉树

    二叉链表中,每个结点有两个指针域。对于叶子结点来说,没有子节点,指针根本没用。于是就可以用来存储遍历树的顺序,如同在二叉链表中增加了一条线索,故名穿线二叉树。


    5、最优二叉树

    最优二叉树是构造出来的。利用霍夫曼算法构造出来的二叉树叫最优二叉树。最优二叉树可以用来优化算法。比如霍夫曼编码。


    6、二叉排序树

    二叉排序树用于查找。

    首先将无序表构造成二叉排序树,然后利用这个树,就能很快的进行查找鸟。

    所谓的二叉排序树是这样的:

    1)左子树上的所有结点都小于根节点

    2)右子树上的所有结点都不小于根节点

    3)左右子树也满足上述两个要求


    7、B- 树

    一种动态调节的平衡多路查找树,作用也是在于有利查找。

    B-树不一定是二叉树,是多路树。什么意思?就是一个结点有好多数据域组成,然后每个数据域左右两边都有一个指针域,一个结点有n个数据域的话,就会有n+1个指针域。

    B-树的定义很繁复,突出的2点就是:

    1)数据域左边的子树中,所有数据域都小于它;右边的子树中,所有数据域都不小于它。

    2)B-树是有序的,从左到右,左小右大,数据散落在所有结点上,包括叶子、非叶子。

    B-树是分阶的。所谓的阶,就是每个结点可以放多少个数据域。比如,3阶B-树,就是每个结点最多有3个数据域。有数据加入或者删减,那就要有所调整,甚至也许因为某结点放不下了,还要进行裂变。


    8、B+ 树

    B+树是B-树的变种。不同的是,数据散落在B-树的所有结点上,而B+树则是,位于非叶结点上的数据,在叶子结点上也会有一份。比如说,数据52,在B-树位于根节点,那么它在叶子结点上就没有;但在B+树,它在某个叶子结点上也会存在。就是说,B+树的叶子结点,有全部的数据。

    到这里,说SQL SERVER建了聚集索引的表,存储结构是B+树就很好理解了。聚集索引字段,位于非叶子结点,而叶子结点,则包含全部字段。。。


    宝贝、宝贝,我是你的大叔


  • 相关阅读:
    Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
    Linux系列教程(十九)——Linux文件系统管理之手工分区
    Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
    Linux系列教程(十七)——Linux权限管理之文件系统系统属性chattr权限和sudo命令
    Linux系列教程(十六)——Linux权限管理之ACL权限
    Linux系列教程(十五)——Linux用户和用户组管理之用户管理命令
    flask-sqlalchemy用法详解
    flask 扩展包
    机器学习的数学基础-(三、概率论和数理统计)
    机器学习的数学基础-(二、线性代数)
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257865.html
Copyright © 2011-2022 走看看