数据结构—树

77 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

前言

树的知识就十分多且杂了

image.png

看leetcode的分类就能看出来,二叉树就有200多道题,树又有200多道。所以树的知识还是很重要的。

树的最大特点就是:非线性结构,一个直接前驱,但可能有多个 直接后继(1:n)

树是由一个或多个(n≥ 0)结点组成的有限集合。有且仅有一个结点称为根(root);当n>1时,其余的结点分为m(m≥ 0)个 互不相交的有限集合T1、T2…Tm。每个 集合本身又是棵树,被称作这个根的子树。根和子树的关系如下所示:

image.png

树的抽象数据类型定义

ADT Tree {
    数据对象D:D是具有相同特性的数据元素的集合
    数据关系R: 若D是空集,则称为空树;//允许n=0
              若D中仅含一个数据元素,则R为空集;
    数据操作P:
}Tree

树的表示方法

  1. 图形表示法:就是像上图一样的表示方法
  2. 嵌套集合表示法:
  3. 广义表表示法(这个之前介绍过 根作为由子树森林组成的表的名字写在表的左边): image.png
  4. 凹入表示法(目录表示法)

树的基本术语

森林----指m棵不相交的树的集合

双亲----上层的那个结点(直接前驱)

孩子----下层结点的子树的根(直接后继)

兄弟----同一双亲下的同一层结点(孩子之间互称兄弟)

树的一些术语很像前端DOM的叫法(其实是DOM树借鉴了树的概念),结合起来理解一下就容易理解多了。

结点----树中的数据元素

结点----树中的数据元素

后记

树中最常用的就是二叉树,这部分会在下次介绍。