手动平衡BST树

时间:2010-12-06 05:38:47

标签: data-structures binary-tree tree-balancing

我已经完成了手工请求的树(bst> avl)的平衡,我想这很简单,所以我不确定我是否已经正确完成了。

        a
       / \
      b  e3
     / \
    e1 e2

初始状态是: 'a'是'b'(左)和'e3'(右)的父级,'b'是'e1'(左)和'e2'(右)的父级。

应用右旋转给我们:

        b
       / \
     e1   a
         / \
       e2   e3

'b'代替'a',左边是孩子'e1',右边是'a'孩子,'a'左边是'b''e2'。

所以问题:

     
  1. 如果e1本身是包含其他元素的子树或节点,我还可以进行此轮换吗?
  2.  
  3. 2。如果没有e2和e3,我还可以进行这种轮换吗?
  4. 例11; 12; 16

         16
         /
       13
      /
    10
    

    初始状态:16是13的父级,13是10的父级。 我可以做到这一点:13是10(左)和16(右)的父母

    我知道这很简单,但理论通常不会涵盖这些事情,假设它很明确,不适合所有人。 谢谢你的帮助,

1 个答案:

答案 0 :(得分:0)

对所有事情都是的,真的。想想订单属性:左后卫<节点和节点<正确的后代。注意旋转如何保留这个;在旋转之前将a和b与e1,e2和e3进行比较,并在旋转之后检查顺序和后代关系。在放弃它之前,我会让你思考一下。