树的一系列概念
基本概念1
树的定义
树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。
树的基本术语
(只列出需要注意的)
英文 | 释义 | 中文 | 释义 |
---|---|---|---|
Branch | A node with at least one child. | 分支(非终端结点) | 至少有一个孩子的结点称为分支(Branch)或非终端结点。 |
Degree | The number of sub trees of a node. | 度 | 结点所拥有的子树个数称为结点的度(Degree)。 |
Level | The level of a node is defined by 0 + (the number of connections between the node and the root). | 层次 | 结点的层次(Level)从根(Root)开始定义起,根为第0层,根的孩子为第1层。以此类推,若某结点在第i层,那么其子树的根就在第i+1层。 |
Height of node | The height of a node is the number of edges on the longest path between that node and a leaf. | 结点的高度 | 结点的高度是该结点和某个叶子之间存在的最长路径上的边的个数。 |
Height of tree | The height of a tree is the height of its root node. | 树的高度 | 树的高度是其根结点的高度。 |
Depth of node | The depth of a node is the number of edges from the tree’s root node to the node. | 结点的深度 | 结点的深度是从树的根结点到该结点的边的个数。 (注:树的深度指的是树中结点的最大层次。) |
Forest | A forest is a set of n ≥ 0 disjoint trees. | 森林 | 森林是n(>=0)棵互不相交的树的集合。 |
二叉树(Binary Tree)1
每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的基本性质
(1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。
(2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)
(3)对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n, 则m = n + 1。
binary tree——perfect & complete & full
名称 | 英文 | 概念 | 英文 |
---|---|---|---|
完美二叉树 | Perfect Binary Tree | Every node except the leaf nodes have two children and every level (last level too) is completely filled. | 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。 |
完全二叉树 | Complete Binary Tree | Every level except the last level is completely filled and all the nodes are left justified. | 除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。 |
完满二叉树 | Full/Strictly Binary Tree | Every node except the leaf nodes have two children. | 除了叶子结点之外的每一个结点都有两个孩子结点。 |
二叉搜索树/查找树/排序树
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
它具有以下性质:
对于任意节点,其左子树中的所有节点的值小于该节点的值。
对于任意节点,其右子树中的所有节点的值大于该节点的值。
左子树和右子树也都是二叉排序树。
算法分析
- 二叉排序树的平均时间复杂度为O(log n),其中n是树中节点的数量。
- 如果二叉排序树严重失衡,其操作的时间复杂度可能会退化为O(n),即类似链表的性能。
为了解决二叉排序树可能出现的失衡问题,后续引入了平衡二叉树,比如AVL树和红黑树。
但是对于一些简单的应用场景,二叉排序树仍然是一个简单且实用的数据结构。
平衡二叉树 Balanced Binary Search Tree
常见的平衡二叉搜索树有:
- AVL树
- 红黑树
- Treap
- 节点大小平衡树
AVL树 (Adelson-Velsky and Landis Tree)
最早被发明的平衡二叉搜索树为AVL树。
对于任何节点,其左子树和右子树的高度差(即平衡因子)的绝对值不超过1。
换句话说,AVL树保持了严格的平衡条件。
旋转操作
- 左旋转(LL旋转):在一个节点的左子树的左侧进行插入或删除,导致左子树高度过高。
- 右旋转(RR旋转):在一个节点的右子树的右侧进行插入或删除,导致右子树高度过高。
- 左右旋转(LR旋转):在一个节点的左子树的右侧进行插入或删除,导致左子树的右子树高度过高。
- 右左旋转(RL旋转):在一个节点的右子树的左侧进行插入或删除,导致右子树的左子树高度过高。
通过这些旋转操作,AVL树能够在节点的插入或删除后自动调整,使得树保持平衡,并且任何节点的左子树和右子树的高度差不会超过1。
应用场景分析
时间复杂度更稳定,为O(log n)。
AVL树需要维护平衡条件,因此在插入和删除节点时可能需要执行多次旋转操作,这会增加一定的开销。
对于静态数据集合或者读操作频繁的情况,AVL树是一个很好的选择,但是如果频繁进行插入和删除操作,可能会选择其他近似平衡的数据结构,如红黑树。
红黑树(Red-Black Tree)
红黑树的特点和规则如下:
- 节点颜色:每个节点被标记为红色或黑色。
- 根节点:根节点必须是黑色。
- 叶子节点:叶子节点(空节点或null节点)被视为黑色。
- 红色节点规则:不能有两个相邻的红色节点,即红色节点的父节点和子节点不能同时为红色。
- 黑色节点规则:从任意节点到其每个叶子节点的路径上,黑色节点的数量必须相同。
对于任意节点,它的子树高度之间的差异最多是2倍,因此红黑树的高度可以保持在O(log n)范围内。
时间复杂度都是O(log n)。