AVL树
来源:互联网 发布:vscode js代码提示 编辑:程序博客网 时间:2024/06/07 11:48
Problem Description
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
Input
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
Output
输出平衡二叉树的树根。
Example Input
588 70 61 96 120
Example Output
70
#include <bits/stdc++.h>
using namespace std;int n;struct node{ int data, bf; node *r, *l;};node *creat(){ node *root; root = new(node); root -> bf = 0; root -> l = NULL; root -> r = NULL; return root;}int high(node *root){ if(root == NULL) return -1; else return root -> bf;}node *ll(node *root){ node *p; p = root -> l; root -> l = p -> r; p -> r = root; root -> bf = max(high(root -> l), high(root -> r)) + 1; p -> bf = max(high(p -> l), high(p -> r)) + 1; return p;}node *rr(node *root){ node *p; p = root -> r; root -> r = p -> l; p -> l = root; root -> bf = max(high(root -> l), high(root -> r)) + 1; p -> bf = max(high(p -> l), high(p -> r)) + 1; return p;}node *lr(node *root){ root -> l = rr(root -> l); return ll(root);}node *rl(node *root){ root -> r = ll(root -> r); return rr(root);}void avl(node *&root, int k){ if(root == NULL) { root = creat(); root -> data = k; return ; } if(k < root -> data) { avl(root -> l, k); if(high(root -> l) - high(root -> r) == 2) { if(k < root -> l -> data) root = ll(root); else root = lr(root); } } if(k > root -> data) { avl(root -> r, k); if(high(root -> r) - high(root -> l) == 2) { if(k > root -> r -> data) root = rr(root); else root = rl(root); } } root -> bf = max(high(root -> l), high(root -> r)) + 1;}void build(node *&root){ int i, x; root = NULL; for(i = 0; i < n; i++) { scanf("%d", &x); avl(root, x); } return ;}int main(){ node *root; scanf("%d", &n); build(root); printf("%d\n", root -> data); return 0;}
//根据模板改编而成
阅读全文
0 0
- AVL树
- AVL树
- AVL树
- avl树
- AVL树
- avl树
- AVL树
- AVL树
- AVL树
- AVL树
- avl树
- avl树
- AVL树
- AVL树
- AVL树
- AVL树
- AVL 树
- AVL树
- hdu 6090 Rikka with Graph(找规律)
- 初识RequireJS
- MySql CURSOR+LOOP循环-使用小实例
- 七种重要的模型验证错误矩阵
- 正式开始写自己的博客
- AVL树
- Java内部类的使用小结
- hdu 1867 kmp A + B for you again
- POJ -3468- A Simple Problem with Integers (线段是区间修改)
- 负载均衡,反向代理,集群解释
- 如何生成Https请求需要的bks证书
- 解决wordpress wp-conten没有权限的问题
- 最长公共子序列问题(LCS)
- SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原