您的位置:首页 > 其它

Sicily-AVLtree的简单构建

2017-12-26 00:54 232 查看


想了解更多关于AVL树的资料请点击这里

本题代码

#include <iostream>
using namespace std ;
struct node
{
node *left ;
node *right ;
int height ;
int key ;
};
int max(int a , int b)
{
return (a > b ? a : b) ;
}
int Height(node * tree)
{
if (tree == NULL)
{
return 0 ;
}
else
{
return tree->height ;
}
}
//RR
node *right_transition(node *tree)
{
node *tree_now ;
tree_now = tree -> right ;
tree -> right = tree_now -> left ;
tree_now -> left = tree ;
tree -> height = max(Height(tree->left), Height(tree->right)) + 1;
tree_now -> height = max(Height(tree_now->left), Height(tree->right)) + 1 ;
return  tree_now ;
}
//LL
node * left_transition(node *tree)
{
node * tree_now ;
tree_now = tree -> left ;
tree -> left  = tree_now -> right ;
tree_now -> right = tree ;
tree -> height = max(Height(tree->left), Height(tree->right)) + 1;
tree_now -> height = max(Height(tree_now->left), Height(tree->right)) + 1 ;
return tree_now ;
}
//LR
node * left_right_transition(node *tree)
{
tree -> left = right_transition(tree->left);
return left_transition(tree) ;
}
//RL
node * right_left_transition(node *tree)
{
tree -> right = left_transition(tree -> right) ;
return right_transition(tree) ;
}
node * creat_node(int key , node *left , node *right)
{
node *temp = new node() ;
temp -> right = right ;
temp -> left = left ;
temp -> key = key ;
temp -> height = 0 ;
return temp ;
}
node * insert(int key, node * tree)
{
if (tree == NULL)
{
tree = creat_node(key, NULL, NULL) ;
}
else if (key < tree -> key)
{
tree->left = insert(key, tree->left);
if (Height(tree->left) - Height(tree->right) == 2)
{
if (key < tree->left->key)
{
tree = left_transition(tree);
}
else
{
tree = left_right_transition(tree) ;
}
}
}
else if (key > tree -> key)
{
tree->right = insert(key, tree->right) ;
if (Height(tree->right) - Height(tree->left) == 2)
{
if (key > tree -> right -> key)
{
tree = right_transition(tree) ;
}
else
{
tree = right_left_transition(tree) ;
}
}
}
tree -> height = max(Height(tree->left), Height(tree->right)) + 1 ;
return tree ;
}
void pre(node *temp)
{
if ( temp )
{
cout << temp->key << ' ' ;
pre(temp->left);
pre(temp->right) ;
}
}
int main()
{
int number = 0 ;
cin >> number ;
for (int i = 0 ; i < number ; i ++ )
{
int test_case
4000
= 0 ;
cin >> test_case ;
node * root = NULL ;
for (int j = 0 ; j < test_case ; j ++ )
{
int temp = 0 ;
cin >> temp ;
root = insert(temp, root);
}
pre(root) ;
cout << endl ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: