平衡二叉树旋转的结果是唯一的吗?

2025-12-05 07:47:41
推荐回答(2个)
回答1:

平衡二叉树旋转的结果不是唯一的,具体见下面分析:

插入序列:12, 4, 1, 7, 8, 10, 9, 2, 11, 6, 5

1、先插入12成为根

2、插入4在12的左子树,没有旋转

3、插入1在4的左子树,以4为中心向右单旋转,结果如下:

4

/   \

1    12

4、插入7在12的左子树,没有旋转

5、插入8在7的右子树,以8开始先左后右双旋转,结果如下:

4

/   \

1    8

/ \

7   12

6、插入10在12左子树,以8为中心开始向左单旋转,结果如下:

8

/     \

4      12

/ \      /

1  7  10

7、插入9在10 的左子树,以10为中心向右单旋转,结果如下:

8

/      \

4       10

/  \      /   \

1   7   9    12

8、插入2在1的右子树,没有旋转

9、插入11在12 的左子树,没有旋转

10、插入6在7的左子树,没有旋转

11、插入5在6的左子树,以6为中心向右单旋转,结果如下:

8

/         \

4           10

/    \         /   \

1      6     9    12

\      /   \        /

2   5   7     11

平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定。

平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

回答2:

插入序列:12, 4, 1, 7, 8, 10, 9, 2, 11, 6, 5

1、先插入12成为根

2、插入4在12的左子树,没有旋转

3、插入1在4的左子树,以4为中心向右单旋转,结果如下:
4
/ \
1 12

4、插入7在12的左子树,没有旋转

5、插入8在7的右子树,以8开始先左后右双旋转,结果如下:
4
/ \
1 8
/ \
7 12

6、插入10在12左子树,以8为中心开始向左单旋转,结果如下:
8
/ \
4 12
/ \ /
1 7 10

7、插入9在10 的左子树,以10为中心向右单旋转,结果如下:
8
/ \
4 10
/ \ / \
1 7 9 12

8、插入2在1的右子树,没有旋转

9、插入11在12 的左子树,没有旋转

10、插入6在7的左子树,没有旋转

11、插入5在6的左子树,以6为中心向右单旋转,结果如下:
8
/ \
4 10
/ \ / \
1 6 9 12
\ / \ /
2 5 7 11