树相关问题

基本概念1

树的定义

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。

树的基本术语

(只列出需要注意的)

英文释义中文释义
BranchA node with at least one child.分支(非终端结点)至少有一个孩子的结点称为分支(Branch)或非终端结点。
DegreeThe number of sub trees of a node.结点所拥有的子树个数称为结点的度(Degree)。
LevelThe 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 nodeThe height of a node is the number of edges on the longest path between that node and a leaf.结点的高度结点的高度是该结点和某个叶子之间存在的最长路径上的边的个数。
Height of treeThe height of a tree is the height of its root node.树的高度树的高度是其根结点的高度。
Depth of nodeThe depth of a node is the number of edges from the tree’s root node to the node.结点的深度结点的深度是从树的根结点到该结点的边的个数。 (注:树的深度指的是树中结点的最大层次。)
ForestA 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 TreeEvery node except the leaf nodes have two children and every level (last level too) is completely filled.除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。
完全二叉树Complete Binary TreeEvery level except the last level is completely filled and all the nodes are left justified.除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。
完满二叉树Full/Strictly Binary TreeEvery 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树保持了严格的平衡条件。

旋转操作

  1. 左旋转(LL旋转):在一个节点的左子树的左侧进行插入或删除,导致左子树高度过高。
  2. 右旋转(RR旋转):在一个节点的右子树的右侧进行插入或删除,导致右子树高度过高。
  3. 左右旋转(LR旋转):在一个节点的左子树的右侧进行插入或删除,导致左子树的右子树高度过高。
  4. 右左旋转(RL旋转):在一个节点的右子树的左侧进行插入或删除,导致右子树的左子树高度过高。

通过这些旋转操作,AVL树能够在节点的插入或删除后自动调整,使得树保持平衡,并且任何节点的左子树和右子树的高度差不会超过1。

应用场景分析

时间复杂度更稳定,为O(log n)。
AVL树需要维护平衡条件,因此在插入和删除节点时可能需要执行多次旋转操作,这会增加一定的开销。
对于静态数据集合或者读操作频繁的情况,AVL树是一个很好的选择,但是如果频繁进行插入和删除操作,可能会选择其他近似平衡的数据结构,如红黑树。

红黑树(Red-Black Tree)

红黑树的特点和规则如下:

  1. 节点颜色:每个节点被标记为红色或黑色。
  2. 根节点:根节点必须是黑色。
  3. 叶子节点:叶子节点(空节点或null节点)被视为黑色。
  4. 红色节点规则:不能有两个相邻的红色节点,即红色节点的父节点和子节点不能同时为红色。
  5. 黑色节点规则:从任意节点到其每个叶子节点的路径上,黑色节点的数量必须相同。

对于任意节点,它的子树高度之间的差异最多是2倍,因此红黑树的高度可以保持在O(log n)范围内。

时间复杂度都是O(log n)。


  1. 内容摘抄自博客1 ↩︎ ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值