04-树4 是否同一棵二叉搜索树
2016-06-02 15:19
274 查看
04-树5 Root of AVL Tree (25分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer NN (\le 20≤20) which is the total number of keys to be inserted. Then NN distinct integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the root of the resulting AVL tree in one line.
Sample Input 1:
5
88 70 61 96 120
Sample Output 1:
70
Sample Input 2:
7
88 70 61 96 120 90 65
Sample Output 2:
88
题目大意:输入一段序列,构成AVL树,输出顶点
思路:用构成二叉搜索树的方法,当层次树大于或等于二的时候,旋转调整。
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer NN (\le 20≤20) which is the total number of keys to be inserted. Then NN distinct integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the root of the resulting AVL tree in one line.
Sample Input 1:
5
88 70 61 96 120
Sample Output 1:
70
Sample Input 2:
7
88 70 61 96 120 90 65
Sample Output 2:
88
题目大意:输入一段序列,构成AVL树,输出顶点
思路:用构成二叉搜索树的方法,当层次树大于或等于二的时候,旋转调整。
#include <iostream> using namespace std; #define Elemment int typedef struct Avltree{ Elemment data; struct Avltree* left; struct Avltree* right; int height; }Avltree; int getheight(Avltree* t) { if (t == NULL) return -1; else return t->height; } int max(int leftHeight, int rightHeight) { if (leftHeight >= rightHeight) return leftHeight; else return rightHeight; } Avltree* rrrotation(Avltree* t) { Avltree* top = t->right; //t->right = top->left; //top->left = t; t->right = top->left; top->left = t; t->height = max(getheight(t->left), getheight(t->right)) + 1; top->height = max(getheight(top->right), getheight(top->left)) + 1; return top; } Avltree* llrotation(Avltree* t) { Avltree* top = t->left; //t->left = top->right; //top->right = t; t->left = top->right; top->right = t; t->height = max(getheight(t->left), getheight(t->right)) + 1; top->height = max(getheight(top->left), getheight(top->right)) + 1; return top; } Avltree* rlrotation(Avltree* t) { t->right = llrotation(t->right); return rrrotation(t); } Avltree* lrrotation(Avltree* t) { t->left = rrrotation(t->left); return llrotation(t); } Avltree* insert(Elemment x, Avltree* t) { if (t == NULL) { t = new Avltree; t->data = x; t->height = 0; t->left = NULL; t->right = NULL; } else if (x < t->data) { t->left = insert(x, t->left); if (getheight(t->left) - getheight(t->right) == 2) { if (x < t->left->data) { t = llrotation(t); } else { t = lrrotation(t); } } } else if (x>t->data) { t->right = insert(x, t->right); if (getheight(t->right) - getheight(t->left) == 2) { if (x > t->right->data) { t = rrrotation(t); } else { t = rlrotation(t); } } } t->height = max(getheight(t->left), getheight(t->right)) + 1; return t; } void input() { int num,data; Avltree* top = NULL; cin >> num; for (int i = 0; i < num; i++) { cin >> data; top = insert(data, top); } cout << top->data; } int main() { input(); return 0; }
相关文章推荐
- Linux环境下安装MySQL|Linux下Mysql安装教程
- C语言实现字符串的查找和替换
- 集合替换元素
- mysql基础(二)
- git clone: error: RPC failed; result=56, HTTP code = 200
- 1.7三分钟读懂Saas、Paas、IaaS的区别
- LLDB调试命令(一) p 和 po 命名行的鼻祖 expression 命令
- 【转】忙里偷闲写的小例子---读取android根目录下的文件或文件夹
- git patch
- 【Java】StopWatch任务执行时间监视器
- adaboost简介
- ubuntu下编译protobuf
- Android 沉浸式工具栏把内容挡住
- hive大数据倾斜总结
- 1.6 五分钟学会OpenStack 基础知识
- GDAL学习总结
- JNI笔记
- Sqlite数据库sqlite3命令
- Break Google ReCAPTCHA: ReCAPTCHA科普
- 神经网络机器翻译Neural Machine Translation(5): Gradient-based Optimization Algorithms