JAVA(数据结构和算法)一 树结构

JAVA(数据结构和算法)一 树结构

树的概念

  1. 在Java数据结构中 我们有 森林 树 二叉树 (完全二叉树,满二叉树) 平衡树 红黑树 哈弗曼树 还有mysql中的B 树 B+ 树等树的结构

1.1 树 :在Java程序中 树的实现分为两种一种 是 数组实现还有一种是链表实现现在树的实现一般是基于链表实现的。Java中树的结构如下

JAVA(数据结构和算法)一 树结构
这就是一个常见的树结构 一个树有一个唯一的根节点root上图的A 为该树的根节点 那么 那么一个节点我称为Node 如果一个节点下面有多个节点我们称这些节点为 子节点(孩子节点,叶子节点) 反之这个拥有子节点的 节点我们称之为父节点 如果一个节点之间有多个 节点 我们称这些节点为兄弟节点

一个树有以下这个特点
1.1.1 度:什么是度 一个节点拥有的子节点个数我们称之为度 比如A的度为3 B的度为 2 C的度为0
1.1.2 深度:由根节点开始 由上而下 的一个深度 比如B的深度为2
1.1.3 高度: 与深度相反 从最下面的节点开始 由下到上 比如A的高度为3 这里注意一点 一个节点的高度和深度不一定相等 比如 A的深度为1 高度为3
1.1.4.度数:整个树所有有叶子节点的度的总和 比如上面的 度数为5 度数是总节点数-1

1.2 二叉树: 二叉树是树里面的一种特殊的 存在方式 从字面意思 也可以看出 二叉树 一个节点下面最多有两个子节点这样就形成了二叉树 二叉树 又分为
完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

满二叉树: JAVA(数据结构和算法)一 树结构
当一个二叉树 除最后一层没有子节点其他 都是两个子节点时 我们称这个二叉树为满二叉树
广度优先: 这是最简单的一种遍历方式 从根节点开始 横向遍历 例如上面 的二叉树 广度遍历为 ABCDEFG

深度优先: 这是最常用的一种遍历方式 由根节点开始往下深度遍历 深度遍历 又分为
前序遍历 :从根节点开始依次遍历左边和右边 由上图遍历结果为 ABDECFG 前序遍历特点遍历时根节点一定是第一个
中序遍历 :从最左边开始 以父节点为中心对称遍历 由上图遍历结果为 DBEAFCG 中序遍历的特点 遍历的时候根节点不可能出现在 头部 和尾部
后序遍历: 从深度最深开始遍历 先遍历根节点左边然后是右边最后是根
节点由上图遍历结果为 DEBFGCA 后序遍历的特点根节点一定是最后
一个被遍历的

1.3 红黑树 : 红黑树是平衡树的一种 红黑树 在java中最常见的地方是hashmap的在而hashmap是基于 链址算法实现的 也就是基于数组和链表 我们知道 链表的搜索很慢 所以这个时候使用红黑树的 二分查找大大加快的检索的效率

1.4 B 树 :学过mysql的应该了解过 用于 优化索引 加快搜索效率 具体原理本人能力有限就不在叙述

1.5 B+树 :B树的一个加强版用处跟B 树一样加快搜索效率但之间的有些结构不一样