二叉树、平衡二叉树、伸展树
二叉搜索树(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树的插入和调整,之前领悟的比较好所以没什么错题,这里也不怎么有这两种题型,但是这两种题型是非常重要的而且理解起来是有难度的,所以要经常看,确保是一直理解的,要不然过一段时间忘了又要重新花不少时间来理解
伸展树