数据结构实验之查找二:平衡二叉树
来源:互联网 发布:spss数据分析师认证 编辑:程序博客网 时间:2024/06/05 19:37
Think:
平衡二叉树 AVL 树, 记住基本操作 就大概挺容易了吧 主要操作有
LL
struct node *LL(struct node *t){ struct node *p = t -> l; t -> l = p -> r; p -> r = t; p -> d = max(deep(p -> l), t -> d) + 1; t -> d = max(deep(t -> l),deep(t -> r)) + 1; return p;}
RR
struct node *RR(struct node *t){ struct node *p = t -> r; t -> r = p -> l; p -> l = t; p -> d = max(deep(p -> l),t -> d) + 1; t -> d = max(deep(t -> l),deep(t -> r)) + 1; return p;}
RL
struct node *RL(struct node *t){ t -> r = LL(t -> r); return RR(t);}
LR
struct node *LR(struct node *t){ t -> l = RR(t -> l); return LL(t);}
Problem Description
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
Input
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
Output
输出平衡二叉树的树根。
Example Input
5
88 70 61 96 120
Example Output
70
#include<bits/stdc++.h>using namespace std;typedef int Elemtype;struct node{ Elemtype data; int d; struct node *l, *r;};struct node *creat(struct node *t, int x);int max(int a, int b);int deep(struct node *t);struct node *LL(struct node *t);struct node *RR(struct node *t);struct node *RL(struct node *t);struct node *LR(struct node *t);int main(){ int n, m, i; cin >> n; struct node *tree = NULL; for (i = 0; i <= n - 1; i ++) { cin >> m; tree = creat(tree , m); } cout << tree -> data<<endl; return 0;}struct node *creat(struct node *t, int x){ if (t == NULL) { t = new node; t ->data = x; t -> d = 0; t -> l = t -> r = NULL; } else if (t -> data > x) { t -> l = creat(t -> l , x); if (deep(t -> l) - deep(t -> r) > 1) { if (t -> l -> data > x) t = LL(t); else t = LR(t); } } else if (t -> data < x) { t -> r = creat(t -> r, x); if (deep(t -> r) - deep(t -> l) > 1) { if (t -> r -> data < x) t = RR(t); else t = RL(t); } } t -> d = max(deep(t -> l), deep(t -> r)) + 1; return t;}int max(int a, int b){ if (a > b) return a; else return b;}int deep(struct node *t){ if (t == NULL) return -1; else return t -> d;}struct node *LL(struct node *t){ struct node *p = t -> l; t -> l = p -> r; p -> r = t; p -> d = max(deep(p -> l), t -> d) + 1; t -> d = max(deep(t -> l),deep(t -> r)) + 1; return p;}struct node *RR(struct node *t){ struct node *p = t -> r; t -> r = p -> l; p -> l = t; p -> d = max(deep(p -> l),t -> d) + 1; t -> d = max(deep(t -> l),deep(t -> r)) + 1; return p;}struct node *RL(struct node *t){ t -> r = LL(t -> r); return RR(t);}struct node *LR(struct node *t){ t -> l = RR(t -> l); return LL(t);}
阅读全文
0 0
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- prototype扩展的JavaScript常用函数库
- SpringBoot入门(一)
- 从太原马拉松未中签聊起
- 排序-->插入排序(直接插入排序&&希尔排序)
- openlayers3 pointermove onmousemove 显示feature信息
- 数据结构实验之查找二:平衡二叉树
- 运用全排列的方法解决八皇后问题
- 超声显微镜高速数据采集卡
- 二维数组按指定的键值排序
- 安卓手机的这些省电技巧你都会了吗
- 自定义相机设置捕捉图像区域
- java 获取本机的所有网卡的Mac地址
- hihocoder 1366 逆序单词
- 调试css层,一行代码学js