平衡二叉树
来源:互联网 发布:淘宝卷皮折扣网 编辑:程序博客网 时间:2024/06/07 05:11
Time Limit: 400MS Memory limit: 65536K
题目描述
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
输入
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
输出
输出平衡二叉树的树根。
示例输入
588 70 61 96 120
示例输出
70
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;struct node{ int d,h; node *l,*r;};int Max(int a,int b){ return a>b?a:b;}int dp(node *rt){ if(!rt) return -1; else return rt->h;}node *LL(node *rt){ node *p=rt->l; rt->l=p->r; p->r=rt; rt->h=Max(dp(rt->l),dp(rt->r))+1; p->h=Max(dp(rt->l),dp(rt->r))+1; return p;}node *RR(node *rt){ node *p=rt->r; rt->r=p->l; p->l=rt; rt->h=Max(dp(rt->l),dp(rt->r))+1; p->h=Max(dp(rt->l),dp(rt->r))+1; return p;}node *LR(node *rt){ rt->l=RR(rt->l); return LL(rt);}node *RL(node *rt){ rt->r=LL(rt->r); return RR(rt);}node *creat(node *rt,int k){ if(!rt) { rt=new node; rt->d=k; rt->h=0; rt->l=rt->r=NULL; } else { if(k<rt->d) { rt->l=creat(rt->l,k); if(dp(rt->l)-dp(rt->r)>1) { if(k<rt->l->d) rt=LL(rt); else rt=LR(rt); } } else { rt->r=creat(rt->r,k); if(dp(rt->l)-dp(rt->r)>1) { if(k>rt->r->d) rt=RR(rt); else rt=RL(rt); } } } rt->h=Max(dp(rt->l),dp(rt->r))+1; return rt;}int main(){ int n,m; node *head=NULL; cin>>n; while(n--) { scanf("%d",&m); head=creat(head,m); } cout<<head->d<<endl; return 0;}
0 0
- 平衡二叉树平衡法则
- 二叉树--二叉平衡树
- 平衡二叉树的
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉查找树
- 平衡二叉树 详解
- 平衡二叉树
- 平衡二叉树
- AVL 平衡二叉树
- 平衡二叉树
- 平衡二叉树-红黑树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 第三章:C语言特性
- iOS开发 关于tableView加载图片时出现卡顿时的解决办法
- treeviw的展开属性
- vs打开utf8编码文件
- update-rc.d的具体用法
- 平衡二叉树
- fusetool 里面的 ActivatingAnimation 使用理解
- 处理iOS键盘通知
- Linux 内核list使用
- mysql 点赞取消点赞语句
- Android Studio查看类结构的快捷键
- CodeForces 572A,B,C
- iOS开发-如何把广告,图片通过代码加到Screen上
- softmax regression 推导