我已经看到,当从 AVL 树中删除一个节点时,它可能需要多次重组,而插入只需要一次。谁能给我一个这样的删除案例的例子。我还实现了一个 AVL 树,我想检查 delete() 函数是否正常工作。那么你能给出一系列插入然后删除,这可以帮助我确定我的 delete() 是否正确并处理所有这些吗?
假设您有一个 AVL 树,每个节点都存储一个名称(字符串),并且您有函数 insertAVL(element) 和 deleteAVL(element)。
我已经看到,当从 AVL 树中删除一个节点时,它可能需要多次重组,而插入只需要一次。谁能给我一个这样的删除案例的例子。我还实现了一个 AVL 树,我想检查 delete() 函数是否正常工作。那么你能给出一系列插入然后删除,这可以帮助我确定我的 delete() 是否正确并处理所有这些吗?
假设您有一个 AVL 树,每个节点都存储一个名称(字符串),并且您有函数 insertAVL(element) 和 deleteAVL(element)。
好吧,插入和删除都可以有多个旋转,因为您必须沿着树向上工作。
例如,添加 {5,2,4,3,7,8,10,9} 的数据集然后删除 {5},添加 {9},最后删除 {2}。你得到以下。
addValue. id=5
└── (1) 5
addValue. id=2
└── (2) 5
└── (1) 2
addValue. id=4
└── (3) 5 *unbalanced left 2 - right 0*
└── (2) 2
└── (1) 4
After left rotation:
└── (3) 5 *unbalanced left 2 - right 0*
└── (2) 4
└── (1) 2
After right rotation:
└── (2) 4
├── (1) 2
└── (1) 5
addValue. id=3
└── (3) 4
├── (2) 2
│ └── (1) 3
└── (1) 5
addValue. id=7
└── (3) 4
├── (2) 2
│ └── (1) 3
└── (2) 5
└── (1) 7
addValue. id=8
└── (3) 4
├── (2) 2
│ └── (1) 3
└── (3) 5 *unbalanced right 2 - left 0*
└── (2) 7
└── (1) 8
After left rotation:
└── (3) 4
├── (2) 2
│ └── (1) 3
└── (2) 7
├── (1) 5
└── (1) 8
addValue. id=10
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 7
├── (1) 5
└── (2) 8
└── (1) 10
addValue. id=9
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 7
├── (1) 5
└── (3) 8 *unbalanced left 0 - right 2*
└── (2) 10
└── (1) 9
After right rotation:
└── (5) 4
├── (2) 2
│ └── (1) 3
└── (4) 7
├── (1) 5
└── (3) 8 *unbalanced right 2 - left 0*
└── (2) 9
└── (1) 10
After left rotation:
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 7
├── (1) 5
└── (2) 9
├── (1) 8
└── (1) 10
removeValue. value=5
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 7 *unbalanced right 2 - left 0*
└── (2) 9
├── (1) 8
└── (1) 10
After left rotation:
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 9
├── (2) 7
│ └── (1) 8
└── (1) 10
addValue. id=9
└── (5) 4
├── (2) 2
│ └── (1) 3
└── (4) 9
├── (3) 7 *unbalanced right 2 - left 0*
│ └── (2) 8
│ └── (1) 9
└── (1) 10
After left:
└── (4) 4
├── (2) 2
│ └── (1) 3
└── (3) 9
├── (2) 8
│ ├── (1) 7
│ └── (1) 9
└── (1) 10
removeValue. value=2
└── (4) 4 *unbalanced right 3 - left 1*
├── (1) 3
└── (3) 9
├── (2) 8
│ ├── (1) 7
│ └── (1) 9
└── (1) 10
After right rotation:
└── (4) 4 *unbalanced right 3 - left 1*
├── (1) 3
└── (3) 8
├── (1) 7
└── (2) 9
├── (1) 9
└── (1) 10
After left rotation:
└── (3) 8
├── (2) 4
│ ├── (1) 3
│ └── (1) 7
└── (2) 9
├── (1) 9
└── (1) 10
我这里有一棵 AVL 树,如果你想仔细看看的话。