0

所以我有一个看起来像这样的二叉树实现

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

我了解树旋转的概念,但我真的不知道如何使用它们(或任何其他算法)使树完全倾斜,如上图所示

如果有人能指出我的算法或其他资源的方向来做到这一点,我将非常感激

4

0 回答 0