数据结构

树的基本定义和分类

2019-11-04  本文已影响0人  程序员will

树的基本定义和分类

树的定义

无论是链表,栈还是队列,它们都是线性结构的,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用。这里我要说一种非线性的数据结构,其大部分操作的运行时间平均为O(logn)

我们涉及到的这种数据结构叫做树。在计算机科学中,树是非常有用的抽象概念。我们形象的去描述一棵树,一个家族的老祖可能有两个儿子,这两个儿子一个有一个儿子,一个有三个儿子,像这样发展下去的一个族谱,就是一个树。

二叉树的遍历

二叉树的遍历分为深度优先遍历和广度优先遍历。

深度优先遍历

深度优先遍历即将树的所有结点都访问且仅访问一次。按照根结点访问次序的不同,可以分为前序遍历,中序遍历,后序遍历

举例:


image

前序遍历:a b d e f g c

中序遍历:d e b g f a c

后序遍历:e d g f b c a

层次遍历:a b c d f e g

广度优先遍历

广度优先遍历也叫层序遍历

树的分类

  1. 无序树
    树中任意节点的子节点之间没有顺序关系。它就是一个无回路的连通图,没有确定根,在自由树中选定一顶点做根,则成为一棵通常的树。

  2. 有序树
    树中任意节点的子节点之间有顺序关系。常见的有序树有:二叉树、完全二叉树、满二叉树、平衡二叉树(AVL树)、二叉查找树、霍夫曼树、B树、字典树。

表达式树

举个栗子,表达式:(a+b×(c-d))-e/f。将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为“表达式二叉树”。

image

完全二叉树&&满二叉树

image

平衡二叉树(Balanced Binary Tree)

二叉堆

二叉堆本质上是一个完全二叉树,又分为两个类型:

  1. 最大堆(最大堆的任何一个父节点的值都大于或等于他的左孩子和右孩子)
  2. 最小堆(最大堆的任何一个父节点的值都小于或等于他的左孩子和右孩子)

二叉堆是实现堆排序优先队列的基础

二叉查找树

二叉查找树又叫二叉排序树二叉搜索树。是一棵空树,或者是具有下列性质的二叉树:

二叉查找树的性质:对二叉查找树进行中序遍历,即可得到有序的数列。

霍夫曼树

带权路径最短的二叉树。是一个一般化的二叉查找树,可以拥有多于2个子节点。

这里多提几个概念:

路径和路径长度:

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第L层结点的路径长哈夫曼树度为 L-1。

结点的权及带权路径长度:

若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

树的带权路径长度:

树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为 WPL。即设二叉树有 n 个叶子结点,每个叶子结点带有权值 wk,从根结点到每个叶子的长度为 lk,则每个叶子结点的带权路径长度之和:WPL = ∑wi*li (i = 0,1,2...n)

哈夫曼树(也称为最优二叉树)就是使 WPL 达到最小的二叉树, 哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

B树

树和平衡二叉树稍有不同的是B树属于多叉树又名平衡多路查找树(查找路径不只两个),数据库索引技术里大量使用者B树和B+树的数据结构。

字典树

Tire树称为字典树,又称单词查找树,Trie树用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。

它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 
Tire树的三个基本性质:

  1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符;
  2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
  3. 每个节点的所有子节点包含的字符都不相同。
上一篇下一篇

猜你喜欢

热点阅读