数据结构实验之查找二:平衡二叉树
来源:互联网 发布:家具设计软件 编辑:程序博客网 时间:2024/06/01 09:08
数据结构实验之查找二:平衡二叉树
Time Limit: 400MS Memory Limit: 65536KB
Problem Description
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
Input
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
Output
输出平衡二叉树的树根。
Example Input
588 70 61 96 120
Example Output
70
Hint#include <stdio.h>#include <stdlib.h>struct tree{ int data, dp; struct tree *l, *r;};int max(int x,int y){ return x > y? x : y;}int deep(struct tree *t){ if(t == NULL) { return -1; } else { return t -> dp; }}struct tree *LL(struct tree *t){ struct tree *p; p = t -> l; t -> l = p -> r; p -> r = t; p -> dp = max(deep(p -> l),t -> dp) + 1; t -> dp = max(deep(t -> l),deep(t -> r)) + 1; return p;}struct tree *RR(struct tree *t){ struct tree *p; p = t -> r; t -> r = p -> l; p -> l = t; p -> dp = max(deep(p->r),t->dp) + 1; t -> dp = max(deep(t->l),deep(t->r)) + 1; return p;}struct tree *RL(struct tree *t){ t -> r = LL(t -> r); return RR(t);}struct tree *LR(struct tree *t){ t -> l = RR(t -> l); return LL(t);};struct tree *create(struct tree *t, int x){ if(t == NULL) { t=(struct tree *)malloc(sizeof(struct tree)); t -> l = NULL; t -> r = NULL; t -> data = x; t -> dp = 0; } else if(x < t -> data) { t -> l = create(t -> l, x); if(deep(t -> l) - deep(t -> r) > 1) { if(x < t -> l -> data) { t = LL(t); } else { t = LR(t); } } } else if(x > t -> data) { t -> r = create(t -> r, x); if(deep(t -> r) - deep(t -> l) > 1) { if(x > t -> r -> data) { t = RR(t); } else { t = RL(t); } } } t -> dp = max(deep(t -> l),deep(t -> r)) + 1; return t;}int main(){ int n, i, x; scanf("%d", &n); struct tree *root = NULL; for(i = 1; i <= n; i++) { scanf("%d", &x); root = create(root, x); } printf("%d", root -> data); return 0;}
Author
0 0
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- thinkphp 结合阿里大于发送短信
- 一、Cocoapods基础操作
- %00截断攻击的探索
- oracle sql 优化--nested loop
- 【LeetCode】515. Find Largest Value in Each Tree Row
- 数据结构实验之查找二:平衡二叉树
- beego API开发以及自动化文档
- Spark机器学习之特征提取、选择、转换
- 【java 类加载的深入研究1】loadClass()的研究
- C#基础-类的基础知识
- leetcode 153: Find Minimum in Rotated Sorted Array
- img标签图片自适应
- 通过github展示本地网站
- 如何删除MySQL的 bin log日志文件