寻求满足特定增删节点要求的11节点AVL树
寻求满足特定增删节点要求的11节点AVL树
我来给你构造一个完全符合要求的11节点AVL树,先理清楚核心逻辑:我们需要的树高度为4(按节点数定义高度,即根到最长叶子路径包含4个节点)。11个节点的AVL树最大高度就是4,且删除两个节点后剩余9个、插入一个后12个节点,都小于高度5的AVL树最小节点数15,理论上可以保持高度4,关键是结构要能支撑任意增删后的平衡操作不改变高度。
具体树结构
8 / \ 4 10 / \ / \ 2 6 9 11 / \ / \ 1 3 5 7
这个结构的细节:
- 根节点是8
- 左子树是7个节点的满AVL树(高度3),包含节点1-7,是完全平衡的结构
- 右子树是3个节点的AVL树(高度2),包含节点9-11
验证删除任意两个节点的情况
不管删除哪两个节点,平衡后树的高度都能保持4:
- 两个节点都在左子树:左子树剩余5个节点,仍为高度3的AVL树(5≥高度3的AVL树最小节点数4),右子树高度2,根节点高度为
max(3,2)+1=4,高度不变。 - 一个节点在左、一个在右:左子树剩6个节点(高度3),右子树剩2个节点(高度1)。此时根节点平衡因子为2,执行LL旋转后,新根为原左子树的根4,原根8变为4的右孩子,4的原右子树(5-7)变为8的左子树。新根的左右子树高度分别为2和3,最终高度为
max(2,3)+1=4。 - 两个节点都在右子树:右子树剩1个节点(高度1),根节点平衡因子为2,同样执行LL旋转后,新根的右子树高度为3,整体高度仍为4。
验证插入任意一个节点的情况
插入任意节点后总节点数为12,小于高度5的AVL树最小节点数15,通过AVL旋转可保持高度4:
- 插入到右子树:右子树变为4个节点(高度2),根节点平衡因子为1,树仍为AVL树,高度保持4。
- 插入到左子树:左子树变为8个节点(高度4),根节点平衡因子为2,执行LL旋转后,新根的左右子树高度均为3,整体高度为
max(3,3)+1=4,高度不变。
备注:内容来源于stack exchange,提问作者Jonathan L




