[TOC]

数据结构-树

1、介绍:

是一种数据结构,它是由n(n>=1 , n=0 的是空树)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

每个结点有零个或多个子结点;

没有父结点的结点称为根结点;

每一个非根结点有且只有一个父结点;

除了根结点外,每个子结点可以分为多个不相交的子树;

2、定义

树(tree)是包含n(n>=0)个结点的有穷集,其中:

  1. 每个元素称为结点(node);

  2. 有一个特定的结点被称为根结点或树根(root)。

  3. 除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。

树也可以这样定义:

树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。

我们可以形式地给出树的递归定义如下:

单个结点是一棵树,树根就是该结点本身。

设T1,T2,..,Tk是树,它们的根结点分别为n1,n2,..,nk。用一个新结点n作为n1,n2,..,nk的父亲,则得到一棵新树,结点n就是新树的根。我们称n1,n2,..,nk为一组兄弟结点,它们都是结点n的子结点。我们还称T1,T2,..,Tk为结点n的子树。

空集合也是树,称为空树。空树中没有结点。

结点的度:一个结点含有的子结点的个数称为该结点的度;

叶结点或终端结点:度为0的结点称为叶结点;

非终端结点或分支结点:度不为0的结点;

双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;

孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;

兄弟结点:具有相同父结点的结点互称为兄弟结点;

树的度:一棵树中,最大的结点的度称为树的度;

结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;

树的高度或深度:树中结点的最大层次;

堂兄弟结点:双亲在同一层的结点互为堂兄弟;

结点的祖先:从根到该结点所经分支上的所有结点;

子孙:以某结点为根的子树中任一结点都称为该结点的子孙。

森林:由m(m>=0)棵互不相交的树的集合称为森林;

3、种类

  • 无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
  • 有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
  • 二叉树:每个节点最多含有两个子树的树称为二叉树;
  • 二叉查找树:每个节点最多含有两个子树的树称为二叉树,且有序;
  • 完全二叉树
  • 满二叉树
  • 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;

4、表示方法

4.1、图像表达法

image-20211112100906763

4.2、符号表达法

用括号先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,而对子树也采用同样的方法处理;同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。如前文树形表示法可以表示为:( A( B(D,E ) , C(F) ) )

4.3、遍历表达法

  • 先序遍历:先访问根节点,再访问左子树,最后访问右子树。 ABDECF

  • 中序遍历:先左子树,再根节点,最后右子树。DBEAFC

  • 后序遍历:先左子树,再右子树,最后根节点。DEBFCA

  • 层序遍历:每一层从左到右访问每一个节点。ABCDEF

    前面三种是深度优先遍历 ,最后一种是广度优先遍历