您的位置:首页 > 理论基础 > 数据结构算法

数据结构系列之平衡树(DSW法构建)

2015-06-13 15:51 501 查看
1、DSW原理:

DSW法构造平衡树主要分为两步,第一步是将一个二叉排序树通过旋转变为一个只含右节点的类似单链表的树;第二步是通过旋转将第一步中的树转化为平衡树。

2、实现

     2.1  实现第一步

<span style="font-size:18px;"> public void creatBackbone(IntBSTNode p,boolean b){
IntBSTNode q=p;</span>
<span style="font-size:18px;"></span><pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">              //将所有左子树旋转使二叉排序树不含左子树</span></span>
while(p.left!=null){

this.rightRotate(p,true); p=root; }

<span style="font-size:18px;">       //  遍历右子树,完成右子树中的左子树的旋转操作
while(p.right!=null){
q=p.right;
while(q!=null){
if(q.left!=null){
IntBSTNode s=q.left;
this.rightRotate(q, false);
p.right=s;
q=s.left;
}
else
break;
}
p=p.right;
q=p.right;
}
}</span>


其中的rightRotate函数如下:

<span style="font-size:18px;"> public void rightRotate(IntBSTNode p,boolean b){ //右旋转
IntBSTNode left=p.left;
IntBSTNode rightchild=left.right;
p.left=rightchild;
left.right=p;
if(b)
root=left;
}</span>
     2.2  实现第二步

     (暂时还不会,等待更新。。。)

3、测试
      3.1、对第一步的测试

<span style="font-size:18px;">package 二叉树;

import 元素排序算法.Sort;

public class Test {

public static void main(String[] args) {
IntBST i=new IntBST();
Sort s=new Sort();
i.insert(2);
i.insert(0);
i.insert(7);
i.insert(-12);
i.insert(1);
i.insert(4);
i.insert(8);
System.out.println("普通二叉排序树的广度优先遍历:");
i.breadthFirst();
System.out.println();
i.creatBackbone(i.root,true);
System.out.println("调用creatBackbone后的广度优先遍历:");
i.breadthFirst();
}
}</span>

4、结果:
<span style="font-size:18px;">普通二叉排序树的广度优先遍历:
2 0 7 -12 1 4 8
调用creatBackbone后的广度优先遍历:
-12 0 1 2 4 7 8 </span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息