zoukankan      html  css  js  c++  java
  • 一:树的基础

    树由节点和边构成,两个节点之间有且仅有一条边连接。故此,一棵树是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树、红黑树、赋权平衡树等。

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

    左旋

    左旋

    右旋

    右旋

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

  • 相关阅读:
    Linux如何查找大文件或目录总结
    Linux下动态调整LVM文件系统大小
    ios学习路线图
    js模块,类,继承,命名空间,私有属性等相关概念梳理
    <代码大全2>记录
    2017读书计划
    Spring声明式事务
    Spring-Aop
    Spring静态工厂和扫描器
    Spring-IOC
  • 原文地址:https://www.cnblogs.com/qcxdoit/p/12123165.html
Copyright © 2011-2022 走看看