数据结构实验之查找二:平衡二叉树
来源:互联网 发布:天下三男鬼墨捏脸数据 编辑:程序博客网 时间:2024/06/10 01:53
Problem Description
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
Input
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
Output
输出平衡二叉树的树根。
Example Input
5
88 70 61 96 120
Example Output
70
#include <iostream>using namespace std;typedef struct node{ int data; struct node *l, *r; int d;}Binode, *Bitree;int depth(Bitree T){ if(!T)//空树 return -1; else return T->d;//每插入一个节点,就要更新此节点上层所有节点的深度}int max(int x, int y){ return x > y ? x : y;}Bitree LL(Bitree T){ Bitree p = T->l;//P节点为B节点 T->l = p->r; p->r = T; T->d = max(depth(T->l), depth(T->r)) + 1; p->d = max(depth(p->l), depth(p->r)) + 1; return p;}Bitree RR(Bitree T){ Bitree p = T->r; T->r = p->l; p->l = T; T->d = max(depth(T->l), depth(T->r)) + 1; p->d = max(depth(p->l), depth(p->r)) + 1; return p;}Bitree LR(Bitree T){ T->l = RR(T->l); T = LL(T); return T;}Bitree RL(Bitree T){ T->r = LL(T->r); T = RR(T); return T;}void creat(Bitree &T, int x){ if(!T) { T = new Binode; T->data = x; T->l = T->r = NULL; T->d = 0; } else { if(x < T->data)//左 { creat(T->l, x); if(depth(T->l) - depth(T->r) > 1)//如果新插入节点导致A节点不平衡,则根据情况旋转 { if(x < T->l->data)//左 { T = LL(T); } else//右 T = LR(T); } } else if(x > T->data)//右 { creat(T->r, x); if(depth(T->r) - depth(T->l) > 1) { if(x < T->r->data)//左 T = RL(T); else//右 T = RR(T); } } } T->d = max(depth(T->l), depth(T->r)) + 1;//新插入一个节点后,来更新节点的深度}int main(){ int n, x; cin>>n; Bitree T; T = NULL;//必须有 for(int i = 0; i < n; i++) { cin>>x; creat(T, x); } cout<<T->data<<endl; return 0;}
阅读全文
0 0
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- 彻底理解Linux的各种终端类型以及概念
- SpringMVC返回json数据
- 关于Pandas中的部分索引技巧
- iOS中的常见事件及其响应
- STl训练每个题的总结
- 数据结构实验之查找二:平衡二叉树
- docker 4 安装
- 线程的等待/唤醒机制实例演示
- java微信企业付款
- linux基本操作---shell编程、if、case基本操作
- 深度学习
- QEMU增量镜像制作
- Ldap用户无法登陆操作系统
- springmvc 处理流程图