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

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>




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值