PAT 甲级 1066 JAVA

该博客介绍了如何使用Java实现AVL树,并通过插入操作保持树的平衡。文章详细展示了AVL树节点的定义、插入方法、高度计算、右旋和左旋操作,以及如何在插入后调整树的平衡状态。示例代码演示了插入一系列数值后的根节点值。
摘要由CSDN通过智能技术生成
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PAT1066 {
    public static class AVLTree {
        TreeNode root;

        private class TreeNode {
            int val;
            TreeNode left;
            TreeNode right;
            int height;
            TreeNode(int val){
                this.val = val;
                height = 1;
            }
        }

        AVLTree () {
            root = null;
        }

        TreeNode insertInit(int val) {
            return root = insert(root, val);
        }

        TreeNode insert(TreeNode cur, int val) {
            if (cur == null) return new TreeNode(val);
            if (val < cur.val) {
                cur.left = insert(cur.left, val);
            } else {
                cur.right = insert(cur.right, val);
            }
            if (getHeight(cur.left) - getHeight(cur.right) > 1) {
                if (getHeight(cur.left.left) - getHeight(cur.left.right) > 0) {
                    cur = rotateRight(cur);
                } else {
                    cur.left = rotateLeft(cur.left);
                    cur = rotateRight(cur);
                }
            }
            if (getHeight(cur.left) - getHeight(cur.right) < -1) {
                if (getHeight(cur.right.left) - getHeight(cur.right.right) < 0) {
                    cur = rotateLeft(cur);
                } else {
                    cur.right = rotateRight(cur.right);
                    cur = rotateLeft(cur);
                }
            }
            return cur;
        }

        int getHeight (TreeNode cur) {
            if (cur == null) return 0;
            return Math.max(getHeight(cur.left), getHeight(cur.right)) + 1;
        }

        TreeNode rotateRight (TreeNode cur) {
            TreeNode temp = cur.left;
            cur.left = temp.right;
            temp.right = cur;
            return temp;
        }

        TreeNode rotateLeft (TreeNode cur) {
            TreeNode temp = cur.right;
            cur.right = temp.left;
            temp.left = cur;
            return temp;
        }

    }

    public static void main (String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        String[] line = br.readLine().split(" ");
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(line[i]);
        }
        AVLTree avlTree = new AVLTree();
        for (int i : arr) {
            avlTree.insertInit(i);
        }
        System.out.println(avlTree.root.val);
    }
}

AVL树的基本解法,ac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值