Loading

数据结构与算法题型——chapter 3:二叉搜索树操作集、AVL与伸展树

二叉树、平衡二叉树、伸展树

二叉搜索树BST , Binary Search Tree)也称为二叉排序树或者二叉查找树

定义:对于任何一个节点,左子树的关键值总小于该节点,右子树的关键值总大于该节点,且对左右子树的任何一个节点都满足上述条件。(递归定义)
基本操作:Find;FindMin;FindMax;Insert;Delete
二叉搜索树的操作集:<数据结构浙大>04-树7 二叉搜索树的操作集 (30 分)_m0_60791400的博客-CSDN博客****

平衡因子:某个节点的平衡因子就是那个节点的左子树高度减去右子树高度

平衡二叉树(Balanced Binary Tree )又称为AVL树

平衡二叉树可以是一颗空树,也可以是具有下列性质的一颗二叉搜索树:任意节点左右子树的高度差的绝对值不超过1

重点是当平衡二叉树不平衡时的调整

  • 当为左倾45°的直线时——右旋
  • 当为右倾45°的直线时——左旋
  • 当为左倾45°的直线+右倾45°的直线时——左旋+右旋
  • 当为右倾45°的直线+左倾45°的直线时——右旋+左旋

---->当为第二三种情况时,找到平衡因子的绝对值最先到达2的节点,我们称这个节点为发现者

之后移动距离发现者最近的节点

平衡二叉树节点跟高度的关系

设f(n)为高度为n的平衡二叉树最少含有的节点数,则:f(1) = 1;f(2) = 2; f(3) = 4;f(4) = 7;……

有如下结论:f(n) = f(n-1) + f(n-2) +1,(n>=3)


引导问题:求一棵二叉树的节点数目:

​ 假设一颗二叉树T,其左右子树分别为TL,TR。

​ T的节点数目为F(T)

​ TL和TR的节点数目分别为F(TL),F(TR)。则显然:

F(T) = F(TL) + F(TR) + 1。


证明:求高度为n的平衡二叉树最小需要多少节点

假设T为高度为n的平衡二叉树,其需要最少的节点数目为F(n)。TL,TR为T的左右子树,因此TL,TR也为平衡二叉树。

假设F1,F2为TL,TR的最少节点数,则:F(n) = F1+F2 +1。那么F1,F2 等于多少呢?

由于TL,TR与T一样是平衡二叉树,又由于我们知道T的最少节点数是F(n),其中n为T的高度,因此如果我们知道TL,TR的高度就可以知道F1,F2的值了。

由平衡二叉树的定义可以知道,TL和TR的高度要么相同,要么相差1,而当TL与TR高度相同时(即:都等于n-1),我们算出来的F(n)并不能保证最小,因此只有当TL与TR高度相差一时(即一个高度为n-1,一个高度为n-2),计算出来的F(n)才能最小。

此时我们假设TL比TR高度要高1(即:TL高度为n-1,TR高度为n-2),则有:F1 = F(n-1),F2 = F(n-2)。

因此得到结论:求高度为n的平衡二叉树最少需要 F(n) = F(n-1) + F(n -2 ) + 1个节点


又有结论:

深度为h的平衡二叉树的最少节点数N=F(h+2)-1;
F(n)为斐波那契数列,
高度范围:F(h+2)-1<=n


题型概括:平衡二叉树的插入

pta错题集

在这里插入图片描述
B
在这里插入图片描述
这个反转的答案忘了,自己插入调整一下就得出来了,按照上面的步骤。

在这里插入图片描述
A
在这里插入图片描述
C
在这里插入图片描述
C

关于AVL树的插入和调整,之前领悟的比较好所以没什么错题,这里也不怎么有这两种题型,但是这两种题型是非常重要的而且理解起来是有难度的,所以要经常看,确保是一直理解的,要不然过一段时间忘了又要重新花不少时间来理解

伸展树

在这里插入图片描述
在这里插入图片描述

posted @ 2021-11-28 00:32  EEvinci  阅读(8)  评论(0编辑  收藏  举报