树、二叉树、二叉排序树、平衡二叉树

数据间的逻辑结构

  • 线性结构(一对一关系)
  • 树形结构(一对多关系)
  • 图形结构(多对多关系)
  • 集合(松散关系)

一、二叉树基础

1、树与二叉树

  • 树 :每个结点可以有多棵子树,子树不分顺序。
  • 二叉树:每个结点最多有两棵子树,子树有严格的左、右之分。
    《树、二叉树、二叉排序树、平衡二叉树》

2、树的常用术语

  • 分支、结点
  • 结点的度:结点所包含的分支个数。树的度:树中所有结点的度的最大值
    注:在二叉树中,树的度、节点的度 都为2。
  • 叶子结点:度为0的结点。 分支结点:度大于0的结点

例:
下面这棵树:树的度为3,总共13个结点,叶子结点为:E,K,L,G,H,I,M
《树、二叉树、二叉排序树、平衡二叉树》

  • 结点的层次:根节点层次为1,第i层结点的子树根结点的层次为i+1
  • 树的高度(深度):树中叶子结点所在的最大层次

例:
下面这棵树:B层次为2、E层次为3,树的高度为3
《树、二叉树、二叉排序树、平衡二叉树》

3、二叉树 的分类

(1)完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
《树、二叉树、二叉排序树、平衡二叉树》
(2)满二叉树:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
《树、二叉树、二叉排序树、平衡二叉树》
(3)平衡二叉树:平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:

  • 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1
  • 并且左右两个子树都是一棵平衡二叉树。

4、二叉树 的遍历

树的遍历分为三种:

  • 前序遍历(先序遍历)
  • 中序遍历(中根遍历)
  • 后序遍历(后根遍历)

如图所示二叉树:
《树、二叉树、二叉排序树、平衡二叉树》
(1)先序遍历:
遍历规则:先访问根节点、再前序遍历左子树、再前序遍历右子树、再对子树做之前重复的工作。

前序遍历的输出结果:ABDECF

(2)中序遍历:
遍历规则:先中序遍历左子树、再访问根节点、再中序遍历右子树、再对子树做之前重复的工作。

中序遍历的输出结果:DBEAFC

(3)后序遍历:
遍历规则:先后序遍历左子树、再后序遍历右子树、再访问根节点、再对子树做之前重复的工作。

后序遍历的输出顺序:DEBFCA

二、平衡二叉树

平衡二叉树是二叉树的一种应用,在介绍平衡二叉树之前,首先来看一看什么是二叉排序树。

1、二叉排序树

二叉排序树要么是一棵空树,
若不是空树,则是具有下列性质的二叉树:

(1)

  • 若它的左子树不空,则左子树中所有结点的值均小于树根结点的值
  • 若它的右子树不空,则右子树中所有结点的值均大于等于树根结点的值
  • 其左、右子树也分别是二叉排序树。

(2)二叉排序树的最大值、最小值

  • 最小值:位于其“左下角”,即从根开始沿指针lchild一直“向下”,直到指针lchild为空的结点。
  • 最大值:位于其“右下角”,即从根开始沿指针rchild一直“向下”,直到指针rchild为空的结点。

(3)对二叉排序树进行中序遍历,可得到一个升序序列。

由于二叉排序树的有序性,在树中进行查找的效率较高。查找的对象称为查找目标,若找到称为查找成功;否则称为查找失败。

二叉排序树的每棵子树仍是二叉排序树。每个结点的左子结点的值均小于结点本身的值,其右子结点的值均大于等于结点本身的值。这个条件是其必要条件而非充分条件。换句话说,若一棵二叉树中每个结点左子结点的值小于结点的值,其右子结点的值大于等于结点的值,树不一定是二叉排序树。

对于一般二叉树来说,仅知道树的先序序列或后序序列,不能唯一确定这棵二叉树。但具体到二叉排序树,知道其先序序列或是后序序列,均能唯一确定该树,因为其中序序列是隐含给出的。

二叉排序树各结点中保存的值称为关键字,有些应用中,要求关键字具有唯一性。
二叉排序树的操作主要有:在树中查找关键字key、在树中添加关键字key、删除树中关键字key所在的结点。

2 、平衡二叉树

同样的关键字集合可以构建出不同的二叉排序树树形,实际上,关键字的插入次序决定了最终得到的树形。如果给定的初始关键字有序,则得到的二叉排序树退化为线性结构,其树高与结点数相当,查找、插入及删除的时间复杂度均为O(n)。树越退化,查找及添加操作的时间复杂度越接近O(n),消弱了树的价值。

1962年,Adelson-Velskii和E.M.Landis提出了一种二叉树结构,这种二叉树对于各级子树的深度是比较平衡的,称为平衡二叉树,又称AVL树(因三位发现者名字的首字母而得名)。它满足二叉排序树的特性,是对二叉排序树的改进,树形上也是比较平衡的,可以达到较高的查找效率

(1)性质:
平衡二叉树或是一棵空树,或是具有下列性质的二叉排序树:
它的左子树和右子树的高度之差的绝对值不超过1;
它的左、右子树都是平衡二叉树。

平衡二叉树的定义是一个递归定义。根据这一定义,平衡二叉树中每个结点的左、右子树的高度之差只能为0、1和-1这三种情况。将结点左、右子树的高度差定义为该结点的平衡因子,即对树中的每个结点,
结点的平衡因子=结点左子树高-右子树高
当出现绝对值大于1的平衡因子时,称树失平衡。

(2)旋转操作:
在二叉排序树的构建过程中,每插入一个关键字后,检查树的平衡情况,若树失平衡,则通过旋转操作使树恢复平衡。

旋转分为单旋转及双旋转两大类,共4种情况:

  • 左旋转
  • 右旋转
  • 左右旋转
  • 右左旋转

具体参见:戳我

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/b954960630/article/details/82152709
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞