目录
什么是树
树是一种非线性数据结构,它由节点和边组成,其中每个节点可以有零个或多个子节点。树的结构特点如下:
-
根节点:树的顶部节点,没有父节点。
-
叶节点:没有子节点的节点称为叶节点,也称为终端节点。
-
父节点和子节点:每个节点可以有一个父节点和多个子节点,父节点指向它的子节点。
-
子树:在一个节点下面的所有子节点和它们的子节点形成的树称为该节点的子树。
-
深度:从根节点到某个节点的唯一路径的长度称为该节点的深度。
-
高度:从某个节点到它的子树中的任何叶节点的最长路径的长度称为该节点的高度。
树的结构可以用图形方式表示,通常以根节点为顶点,每个子节点连向父节点的边表示为箭头。
树在实际中的应用:
二叉树
二叉树的概念
二叉树是一种特殊的树形结构,它包含一个根节点和最多两个子节点,每个子节点也是一棵二叉树。具体地说,一个二叉树要么是空树,要么由一个根节点和左右两个子树组成,左子树和右子树可以为空。左子树和右子树的位置不能互换,它们是有顺序的。二叉树常用来实现搜索、排序、遍历等操作,也可用于构建哈夫曼树、AVL树、红黑树等高级数据结构。
二叉树的性质
对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
1. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点
2. 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
3. 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子
特殊的二叉树
1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。
2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树
堆
堆(Heap)是一种特殊的数据结构,通常用来实现优先队列或堆排序算法。堆分为最大堆和最小堆两种。
最大堆是一棵完全二叉树,其中每个节点的值都大于或等于其左右子节点的值,堆顶元素是最大值。
最小堆也是一棵完全二叉树,其中每个节点的值都小于或等于其左右子节点的值,堆顶元素是最小值。
堆的主要操作包括插入、删除堆顶元素和查找堆顶元素。其中插入操作会破坏堆的性质,需要进行堆化操作,使其重新满足堆的性质。删除堆顶元素后,需要重新调整堆,使其满足堆的性质。
堆的时间复杂度:
插入元素的时间复杂度为O(logn);
删除堆顶元素的时间复杂度为O(logn);
查找堆顶元素的时间复杂度为O(1)。
由于堆的特殊性质,堆可以高效地实现优先队列,即每次取出优先级最高的元素。同时,堆排序也是一种高效的排序算法,时间复杂度为O(nlogn)。