一、定义
二叉树是一种树状数据结构,它的每个节点最多有两个子节点。平衡二叉树(Balanced Binary Tree)又叫 AVL 树,它是一种特殊的二叉搜索树。平衡二叉树中任何节点的两个子树的高度差最多为 1,即完美平衡。完全二叉树(Complete Binary Tree)是另一种特殊的二叉树,除了最后一层外,每一层上的节点数都必须是 2 的幂次方(1, 2, 4, 8, …)。
二、性质
平衡二叉树具有以下性质:
1. 空树是一棵平衡二叉树。
2. 对于任何节点,它的左子树和右子树的高度差不超过 1。
3. 对于任何节点,它的左子树和右子树都是平衡二叉树。
完全二叉树具有以下性质:
1. 除了最后一层外,每一层上的节点数都必须是 2 的幂次方(1, 2, 4, 8, …)。
2. 最后一层的节点都集中在左部连续位置上,右部缺少节点。
三、结构
平衡二叉树通常由以下几个部分组成:
1. 根节点:平衡二叉树的顶部节点。
2. 左子树:根节点左侧的子树。
3. 右子树:根节点右侧的子树。
4. 高度:从根节点到最远叶子节点的距离。
5. 平衡因子:节点的左子树高度和右子树高度之差。
完全二叉树通常由以下几个部分组成:
1. 根节点:完全二叉树的顶部节点。
2. 最后一层:位于最底端的节点,其它层的节点都具有两个子节点。
3. 叶子节点:没有子节点的节点,位于最后一层。
4. 父节点和子节点:每个节点都有一个父节点和两个子节点,除了根节点。
5. 深度:从根节点到某个节点的距离,根节点的深度为 0,其它节点的深度为父节点的深度加 1。
6. 完全性:完全二叉树的最后一层上的所有节点都集中在左部连续位置上,右部缺少节点。
四、插入和删除操作
对于平衡二叉树,插入和删除操作相对比较复杂,需要进行平衡操作,使其符合平衡二叉树的性质。插入操作时,需要先找到插入位置并进行插入,然后从该节点开始向上遍历每个祖先节点,检查它们是否失衡,如果失衡,需要进行旋转操作来重新平衡。删除操作时,需要先找到要删除的节点并进行删除,然后从其父节点开始向上遍历每个祖先节点,检查它们是否失衡,如果失衡,同样需要进行旋转操作来重新平衡。对于完全二叉树,由于它的结构具有完全性,插入和删除操作相对简单,只需要维护最后一层的完全性即可。
五、时间复杂度
对于平衡二叉树,其查找、插入和删除操作的时间复杂度均为 O(log n),其中 n 为平衡二叉树中的节点数。对于完全二叉树,由于其结构具有完全性,查找、插入和删除操作的时间复杂度均为 O(log n)。
六、应用场景
平衡二叉树适用于需要频繁进行插入和删除操作,同时又需要保持数据有序性的场景,如数据库索引、机器学习中的决策树等。完全二叉树用于堆和优先队列的实现,可以在O(log n)时间内查找最大或最小值。
微信扫一扫,领取最新备考资料