数据结构与算法七:1. 树和二叉树

692 阅读5分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

关注我,以下内容持续更新

数据结构与算法(一):时间复杂度和空间复杂度

数据结构与算法(二):桟

数据结构与算法(三):队列

数据结构与算法(四):单链表

数据结构与算法(五):双向链表

数据结构与算法(六):哈希表

数据结构与算法(七):树和二叉树

数据结构与算法(八):排序算法

数据结构与算法(九):经典算法面试题

一、树

  • 结点的度(Degree): 一个节点含有的子树的个数称为该点的度

  • 树的度: 一棵树中,最大的节点的度称为树的度

  • 叶结点(Leaf): 度为0的结点. (也称为叶子结点)

  • 路径和路径长度: 从结点n1到nk的路径为一个结点序列n1, n2,… , nk, ni是 ni+1的父结点。路径所包含边的个数为路径的长度。

  • 结点的层次(Level): 规定根结点在1层,其它任一结点的层数是其父结点的层数加1。

  • 树的高度或深度(Depth): 树中所有结点中的最大层次是这棵树的深度。

截屏2021-08-27 18.41.23.png

以这棵树为例对树的术语举例:

  • 结点A和D的度数为3,结点E、F、G、H、I、J的度数均为0;
  • 树的度为 3;
  • A结点的层次是 1,B、C、D结点的层次是2;
  • 树的深度是3

二、二叉树

1. 满二叉树(完美二叉树)

满二叉树:如果二叉树中除了叶子结点,每个结点的度都为2,则此二叉树称为满二叉树。

满二叉树.png 如图,这个二叉树是一个满二叉树,它的深度是4,有2^4-1个节点.

2. 完全二叉树

完全二叉树:如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。

完全二叉树的特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。需要注意的是,满二叉树肯定是完全二叉树,而完全二叉树不一定是满二叉树。

完全二叉树和非完全二叉树.png

3. 二叉搜索树

⼆叉搜索树是⼀个有序树

  • 若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值;
  • 若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值;
  • 它的左、右⼦树也分别为⼆叉排序树

4. 平衡⼆叉搜索树

平衡⼆叉搜索树:⼜被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过1,并且左右两个⼦树都是⼀棵平衡⼆叉树。

AVL树.png

5. 堆

是一棵顺序存储完全二叉树

  • 大顶堆: 每个结点的值都大于或等于其左右孩子结点的值

  • 小顶堆: 每个结点的值都小于或等于其左右孩子结点的值

堆的存储可以用一维数组来实现,对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆:

  • Ri <= R2i+1 且 Ri <= R2i+2 (小顶堆)
  • Ri >= R2i+1 且 Ri >= R2i+2 (大顶堆)

注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。

堆是特殊的完全二叉树,所以构造堆的过程是按照从上至下和从左至右的顺序进行的。堆的存储一般用数组来实现。假设堆的某个节点在数组中的下标为i,那么它的父节点下标为(i-1)/2;它的左子节点的下标为2*i+1;它的右子节点的下标为2*i+2

大顶堆和小顶堆的示例

堆.png

用一维数组表示上图的大顶堆 数组表示堆.png

堆排序是堆的最典型的应用,升序排序用大顶堆,降序排序用小顶堆

三、⼆叉树的存储方式

⼆叉树的存储方式有顺序存储和链式存储,链式存储用指针实现,顺序存储用一维数组来表示,如图所示:

① 顺序存储状态 顺序存储二叉树.png

1.完全二叉树的顺序存储

假设二叉树的某个节点在数组中的下标为i,那么它的父节点下标为(i-1)/2;它的左子节点的下标为2*i+1;它的右子节点的下标为2*i+2

② 二叉链表存储状态 .png

2.2 二叉链表存储

四、二叉树的遍历

二叉树的遍历方式有两种,深度优先搜索(DFS)和广度优先搜索(BFS),深度优先搜索又分为3种遍历方式:前中后序遍历,这三种遍历方式都可以用递归和迭代两种方式来实现。广度优先搜索就是层次遍历,通过迭代来实现。

DFS的前中后序遍历的⾮递归的⽅式可以借助栈来实现;广度优先搜索可以利用队列来实现,因为队列是先进先出的数据结构,只有先进先出才能保证一层层的遍历二叉树

前中后序遍历的顺序如下 二叉树的遍历.png

关注我

如果觉得我写的不错,请点个赞 关注我 您的支持是我更文最大的动力!