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 ; } }
相关文章推荐
- Java使用MyEclipse构建webService简单案例
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
- windows下构建简单的svn服务器
- AVLTree简单实现
- (Struts重构)构建一个简单的基于MVC模式的JavaWeb
- 构建一个简单的 WYSIWYG Web 页面编辑器
- Unity3D 游戏引擎之构建简单的游戏世界(三)
- JavaScript端构建RESTFul Client的简单例子
- Netty4.0学习笔记系列之三:构建简单的http服务
- 开发,配置,调用-三步走构建简单的asp.net webservice
- 就这么简单!构建强大的WebShell防护体系
- Ant—使用Ant构建一个简单的Java工程(两)
- Netty4.0学习笔记系列之三:构建简单的http服务
- 前端构建工具- gulp - 安装及简单CSS,JS文件合并压缩
- akka构建简单分布式应用
- Maven构建简单的多模块项目
- lucene5.3.1+IKAnalyer 构建简单搜索引擎
- 构建简易网络与网络设备的简单配置(Cisco Packet Tracer)第二弹:静态路由协议配置
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
- 【Tiny4412--4】基于busybox的简单根文件系统构建