编程语言:Java
题目:
题解:较为简单。
结果:AC
import java.io.*;
import java.util.Scanner;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static Scanner sc = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) throws IOException {
int n=sc.nextInt();
TNode root=null;
for(int i=0;i<n;i++){
int data=sc.nextInt();
root=Insert(root,data);
}
if(root!=null)
out.println(root.Data);
out.flush();
}
private static TNode Insert(TNode root, int data) {
if(root==null){
root=new TNode(data,null,null);
}else{
if(data>root.Data){
root.right=Insert(root.right,data);
if(Depth(root.right)-Depth(root.left)==2){
if(data>root.right.Data){
//右右单旋
root=RRrotation(root);
}else{
//右左单旋
root=RLrotation(root);
}
}
}else{
root.left=Insert(root.left,data);
if(Depth(root.right)-Depth(root.left)==-2){
if(data>root.left.Data){
//左右单旋
root=LRrotation(root);
}else{
//左左单旋
root=LLrotation(root);
}
}
}
}
return root;
}
private static TNode LLrotation(TNode root) {
TNode node=root.left;
root.left=node.right;
node.right=root;
return node;
}
private static TNode LRrotation(TNode root) {
TNode node =root.left.right;
root.left.right=node.left;
node.left=root.left;
root.left=node.right;
node.right=root;
return node;
}
private static TNode RLrotation(TNode root) {
TNode node=root.right.left;
root.right.left=node.right;
node.right=root.right;
root.right=node.left;
node.left=root;
return node;
}
private static TNode RRrotation(TNode root) {
TNode node=root.right;
root.right=node.left;
node.left=root;
return node;
}
private static int Depth(TNode t){
if(t!=null){
int d1=Depth(t.left);
int d2=Depth(t.right);
return Math.max(d1,d2)+1;
}
return 0;
}
}
class TNode{
int Data;
TNode left;
TNode right;
public TNode(int data, TNode left, TNode right) {
Data = data;
this.left = left;
this.right = right;
}
}