avTree树java实现

主要实现思路为左旋转和右旋转
代码

package com.atguigu.avlTreeDemo;


import java.util.Objects;

/**
 * avl树:平衡二叉树
 */
public class AvlTreeDemo {
   
    public static void main(String[] args) {
   

        //左旋转测试开始
      /*  int[] arr = {4,3,6,5,7,8};
        AvlTree avlTree = new AvlTree();
        for (int num:arr) {
            avlTree.add(new Node(num));
        }
        System.out.println("树的前序遍历结果为");
        avlTree.infixOrder();
        System.out.println("根节点为" + avlTree.root);
        System.out.println("树的高度为" + avlTree.hight());
        System.out.println("树的左子树高度为" + avlTree.leftHight());
        System.out.println("树的右子树高度为" + avlTree.rightHight());*/
        //左旋转测试结束

        /*//右旋转测试开始
        int[] rightRotate = {10,12,8,9,7,6};
        AvlTree rightTree = new AvlTree();
        for (int num:rightRotate) {
            rightTree.add(new Node(num));
        }
        System.out.println("右旋转测试数的中序遍历结果为");
        rightTree.infixOrder();
        System.out.println("树的根节点为" + rightTree.root + "\n树的高度为" + rightTree.hight() +
                "\n树的左子树的高度为" +rightTree.leftHight() + "\n树的右子树的高度为" + rightTree.rightHight());
        //右旋转测试结束*/
        //双旋转测试开始
        int[] rightRotate = {
   10,11,7,6,8,9};
        AvlTree rightTree = new AvlTree();
        for (int num:rightRotate) {
   
            rightTree.add(new Node(num));
        }
        System.out.println("右旋转测试数的中序遍历结果为");
        rightTree.infixOrder();
        System.out.println("树的根节点为" + rightTree.root + "\n树的高度为" + rightTree.hight() +
                "\n树的左子树的高度为" +rightTree.leftHight() + "\n树的右子树的高度为" + rightTree.rightHight());

        //双旋转测试结束
    }
}

/**
 * 平衡二叉树的主体
 */
class AvlTree{
   
    public Node root;

    public AvlTree() {
   
    }

    public AvlTree(Node root) {
   
        this.root = root;
    }

    /**
     *     此方法为左旋转的方法
     *     步骤:
     *     1、创建一个新的节点:值为根节点的值
     *     2、新节点的右子节点为根节点的右节点的左节点
     *     3、新节点的左子节点为根节点的左节点
     *     4、将根节点的右节点的值赋值给根节点
     *     5、根节点的右节点为右节点的右节点
     *     6、根节点的左节点为新节点
     */
    public void leftRotate(){
   
        if (root == null){
   
            return;
        }
       root.leftRotate();
    }
    //添加节点
    public void add(Node node){
   
        if (root == null) {
   
            root = node;
        } else {
   
            root.add(node);
        }
    }
    //树的高度
    public int hight(){
   
        return root == null?0:root.hight();
    }
    //树的左子树的高度
    public int leftHight(){
   
        return root == null?0:root.leftHight();
    }
    //树的左子树的高度
    public int rightHight(){
   
        return root == null?0:root.righttHight();
    }
    //删除节点
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值