#! /usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
my $head = undef;
my $copy = /$head;
foreach my $index( 1 .. 10 ){
&AVLTree_insert($copy, $index);
}
#&create_BSTree( $copy );
#&create_tree( $copy );
print Dumper ( $head );
&tree_delete( $copy, 1 );
print Dumper ( $head );
#&afterward_travel($head);
#&middle_travel($head);
#&layer_travel ( $head );
#&search_BST( $head, 23);
sub max{
my ( $a, $b) = @_;
return $a > $b ? $a : $b;
}
sub ll_rotate {
my $root = shift;
my $x = $$root;
my $y = $x->{left};
$x->{left} = $y->{right};
$y->{right} = $x;
$$root = $x;
$x->{height} = &max( &height( $x->{left} ), &height( $x->{right} ) ) + 1;
$y->{height} = &max( &height( $y->{left} ), &height( $y->{right} )) + 1;
}
sub rr_rotate {
my $root = shift;
my $x = $$root;
my $y = $x->{right};
$x->{right} = $y->{left};
$y->{left} = $x;
$$root = $y;
$x->{height} = &max( &height( $x->{left} ), &height( $x->{right} ) ) + 1;
$y->{height} = &max( &height( $y->{left} ), &height( $y->{right} ) ) + 1;
}
sub lr_rotate {
my $root = shift;
my $x = $$root;
my $y = $x->{left};
&rr_rotate( /$x->{left});
&ll_rotate ( $root);
}
sub rl_rotate {
my $root = shift;
my $x = $$root;
my $y = $x->{right};
&ll_rotate( /$x->{right});
&rr_rotate( $root);
}
sub AVLTree_insert{
my ( $tree, $value ) = @_;
if ( !defined $$tree ){
$$tree = {
height => 0,
left => undef,
right => undef,
value => $value,
}
}
else {
if ( $$tree->{value} > $value ){
&AVLTree_insert( /$$tree->{left}, $value);
if ( (&height( $$tree->{left} ) - &height( $$tree->{ri