• 一:树的基础

    树由节点和边构成,两个节点之间有且仅有一条边连接。故此,一棵树是N个节点和N-1条边的集合。如图:

    若树非空,则树由根节点A,及0个或多个非空子树构成;每颗子树的根都是根A的儿子child,而A是每颗子树的根的父亲,除根节点A以外,每一个节点都有一个父亲。每个节点都可以有任意多个儿子,我们将没有儿子的节点称为“树叶”,具有同一个父亲的节点称为“兄弟”,类似的有“祖父”、“孙子”,如下图:

    深度:某一节点n,n到根节点A的路径长度即为深度。A深度为0

    高度:某一节点n,n到某一树叶节点的最长路径即为高度。所有树叶高度为0.(说某一节点的高度,可以把该节点看成是“地面”,地面到根的长度即为“深度”,到树叶的最长路径为“高度”)

    二:树的遍历

    目录结构是典型的树的应用, 

     先序遍历(目录)、后序遍历(磁盘大小)、中序遍历(表达式树)

    三、二叉树

    二叉树是树在执行‘二胎政策’后的产物,即儿子个数不得大于2。在相同节点个数N的情况下,这个政策有效控制了树的深度,即二叉树的深度比节点个数N小得多。但是在最坏情形下,深度可以达到N-1;

    3.1:二叉查找树ADT:对于树中的每个节点N,N的左子树中所有项小于N中的项,而N的右子树种的所有项都大于N中的项。平均深度O(logN)

    ADT在不断进行交叉删除、插入后,会变得不平衡,从而深度得不到控制。故而加入一种平衡策略:任何节点深度不得过深。--》AVL树:加入平衡条件之后的二叉查找树。

    平衡条件:每个节点的左右子树高度差不得大于1.(空树高度定为-1)

    加入不同的平衡方案,构成不同的平衡树,例如B树、红黑树、赋权平衡树等。

    为了保证平衡条件:引入操作:单旋转、双旋转

    左旋

    左旋

    右旋

    右旋

    双旋:先左后右、先右后左。

  • 相关阅读:
    webpack
    Js数组和字符串常用方法
    Vue.js 2.0 快速上手
    雅虎前端优化的35条军规
    前端问题大杂烩
    Java和js的区别,以及Java和c的区别
    前后端联调
    99%的人都理解错了HTTP中GET与POST的区别
    vue项目目录
    vuex入门
  • 原文地址:https://www.cnblogs.com/qcxdoit/p/12123165.html
Copyright © 2020-2023  润新知