1066. Root of AVL Tree (25)
2015-11-27 12:40
483 查看
1.这道题比较重要,主要考察AVL树的建立
2.需要掌握单旋转,双旋转,插入等操作
2.需要掌握单旋转,双旋转,插入等操作
//#include<string> //#include<stack> //#include<unordered_set> //#include <sstream> //#include "func.h" //#include <list> #include <iomanip> #include<unordered_map> #include<set> #include<queue> #include<map> #include<vector> #include <algorithm> #include<stdio.h> #include<iostream> #include<string> #include<memory.h> #include<limits.h> #include<stack> using namespace std; /* 5 88 70 61 96 120 7 88 70 61 96 120 95 65 */ struct AvlNode{ int val, height; AvlNode*l, *r; AvlNode() :val(-1), height(-1), l(NULL), r(NULL){}; AvlNode(int x) :val(x), height(0), l(NULL), r(NULL){}; }; static int Height(AvlNode* T) { if (T == NULL) return -1; else return T->height; } static AvlNode* SingleRotateLeft(AvlNode* k2) { AvlNode*k1 = k2->l; k2->l = k1->r; k1->r = k2; k2->height = max(Height(k2->l), Height(k2->r)) + 1; k1->height = max(Height(k1->l), k2->height) + 1; return k1; } static AvlNode* SingleRotateRight(AvlNode* k1) { AvlNode*k2 = k1->r; k1->r = k2->l; k2->l = k1; k1->height = max(Height(k1->l), Height(k1->r)) + 1; k2->height = max(Height(k2->r), k1->height) + 1; return k2; } static AvlNode* DoubleRotateLeft(AvlNode* k3) { k3->l = SingleRotateRight(k3->l); return SingleRotateLeft(k3); } static AvlNode* DoubleRotateRight(AvlNode* k3) { k3->r = SingleRotateLeft(k3->r); return SingleRotateRight(k3); } static AvlNode* Insert(int x, AvlNode*T) { if (T == NULL) T = new AvlNode(x); else if (x < T->val) { T->l = Insert(x, T->l); if (Height(T->l) - Height(T->r) == 2) { if (x < T->l->val) T = SingleRotateLeft(T); else T = DoubleRotateLeft(T); } } else if (x > T->val) { T->r = Insert(x, T->r); if (Height(T->r) - Height(T->l) == 2) { if (x>T->r->val) T = SingleRotateRight(T); else T = DoubleRotateRight(T); } } T->height = max(Height(T->l), Height(T->r)) + 1; return T; } int main(void) { int n; cin >> n; AvlNode* root = NULL; for (int i = 0; i < n; i++) { int tmp; cin >> tmp; root=Insert(tmp, root); } cout << root->val << endl; return 0; }
相关文章推荐
- JPA:双向多对多关系
- Android应用检查更新下载安装打开
- 简单实现printf函数
- 1066. Root of AVL Tree (25)
- 专业程序员必习:最牛B的编码套路
- 调查内存剩余太少的问题
- 谈谈CS英文论文写作
- CodeForces 601A The Two Routes(dijkstra最短路)——Codeforces Beta Round #333 (Div.1 Div. 2)
- CodeForces 594D REQ(树状数组)
- 关于“一秒一G LiFi比WiFi快一百倍”的评论
- MYSQL数据库的存储过程(Stored Procedure)
- 1064. Complete Binary Search Tree (30)
- 自定义dialog视图
- 地表两个点 的 距离计算公式
- 1064. Complete Binary Search Tree (30)
- React 入门实例教程
- MYSQL数据库的事务(Transaction)
- 安卓游戏开发者:我是如何把包体减了88%
- 232. Implement Queue using Stacks
- dex分包变形记