欢迎来到军工软件开发人才培养基地——学到牛牛

平衡二叉树概述

时间:2024-05-06 07:01:10 来源:学到牛牛

 

在介绍平衡二叉树之前,我们需要先了解一下排序二叉树。因为平衡二叉树的前提就是该树为排序二叉树。

排序二叉树:

一颗空树,或者是具有下列特点的二叉树。

· 若左子树不为空,则左子树所有节点的值小于根节点。

· 若右子树不为空,则右子树所有节点的值大于根节点。

· 左右子树也都是二叉排序树。

· 没有键值相等的特点。

平衡二叉树的基本概念:

平衡二叉树(Self-Balancing Binary Search Tree 或 Height-Balanced Binary Search Tree)是一种排序二叉树,其中每一个节点的左子树和右子树的高度差至多等于1。即任意节点的子树高度差都小于等于1。

只要二叉树上有一个节点的平衡因子绝对值大于1,则该树不为平衡二叉树。

·平衡因子:二叉树上节点的左子树深度减去右子树深度的值。

平衡二叉树的特点:

平衡二叉树若不为空树的话,则需要满足以下特点。

· 是一个排序二叉树。

· 左子树与右子树都是平衡二叉树,且左子树与右子树深度之差不超过1。

· 平衡二叉树上所有节点的平衡因子只能是-1,0,1。

例如:

例中都不是平衡二叉树,因为都不满足排序二叉树的概念。前者不满足排序二叉树,后者深度绝对值大于1。

满足排序二叉树的同时,左右子树之间深度差值大于1即为平衡二叉树。如下:

平衡二叉树操作:

在平衡因子绝对值大于1时,平衡二叉树会失衡,此时需要旋转纠正。旋转方式有两种:分为左旋和右旋。

· 左旋:

① 旧根节点为新根节点左子树。

② 新根节点左子树若存在,则为旧根节点右子树。

· 右旋:

①旧根节点为新根节点右子树。

②新根节点右子树若存在,则为旧根节点左子树。

旋转纠正类型分为四种:LL型、LR型、RL型、RR型。

· LL型:插入左孩子的左子树,右旋。

· RR型:插入右孩子的右子树,左旋。

· LR型:插入左孩子的右子树,先左旋,再右旋。

· RL型:插入右孩子的左子树,先右旋,再左旋。

LL型右旋:

旧根节点作为新根节点的右子树,新根节点的右子树(如果有)作为旧根节点的左子树。

RR型左旋:

旧根节点作为新根节点的左子树,新根节点的左子树(如果有)作为旧根节点的右子树。

LR型左旋:

①旧根节点作为新根节点的左子树,新根节点的左子树(如果有)作为旧根节点的右子树。

②旧根节点作为新根节点的右子树,新根节点的右子树(如果有)作为旧根节点的左子树。

RL型左旋:

① 旧根节点作为新根节点的右子树,新根节点的右子树(如果有)作为旧根节点的左子树。

② 旧根节点作为新根节点的左子树,新根节点的左子树(如果有)作为旧根节点的右子树。