Sicily-AVLtree的简单构建
来源:互联网 发布:自动刷弹幕软件 编辑:程序博客网 时间:2024/06/16 19:23
想了解更多关于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 ; }}//RRnode *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 ;}//LLnode * 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 ;}//LRnode * left_right_transition(node *tree){ tree -> left = right_transition(tree->left); return left_transition(tree) ;}//RLnode * 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 = 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 ; }}
阅读全文