所以我有一个看起来像这样的二叉树实现
struct node {
struct node *left;
struct node *right;
};
(实际的实现稍微复杂一些,因为存储了额外的数据,因为这是用于布尔代数简化器,但为了让我的观点更简单,我会保持简单)
基本上我收到一棵树,我需要对其进行改造,使其完全左倾
例如
a
/ \
/ \
/ \
/ \
/ \
b \
/ \ \
/ \ \
/ \ \
c \ d
/ \ \ / \
e \ f g \
/ \ \ / \ / \ \
h i j k l m n o
需要成为
g
/ \
d \
/ \ \
a \ \
/ \ \ \
f \ \ \
/ \ \ \ \
b \ \ \ \
/ \ \ \ \ \
c \ \ \ \ \
/ \ \ \ \ \ \
e \ \ \ \ \ \
/ \ \ \ \ \ \ \
h i j k l m n o
我了解树旋转的概念,但我真的不知道如何使用它们(或任何其他算法)使树完全倾斜,如上图所示
如果有人能指出我的算法或其他资源的方向来做到这一点,我将非常感激