数据结构实验之查找二:平衡二叉树
来源:互联网 发布:linux yum安装jdk1.7 编辑:程序博客网 时间:2024/06/08 02:43
数据结构实验之查找二:平衡二叉树
Time Limit: 400MS Memory Limit: 65536KB
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 struct node{ int data; int height; struct node *lchild, *rchild;}BiTNode, *BiTree;int maxh(int a, int b){ return a > b? a : b;}int height(BiTree T){ if(T == NULL) return 0; else return T -> height;}BiTNode *Left(BiTree T) //LL型{ BiTree T2; T2 = T -> lchild; T -> lchild = T2 -> rchild; T2 -> rchild = T; T -> height = maxh(height(T -> lchild),height(T -> rchild)) +1; T2 -> height = maxh(height(T2 -> lchild),height(T2 -> rchild)) +1; return T2;}BiTNode *Right(BiTree T) //RR型{ BiTree T2; T2 = T -> rchild; T -> rchild = T2 -> lchild; T2 -> lchild = T; T -> height = maxh(height(T -> lchild),height(T -> rchild)) +1; T2 -> height = maxh(height(T2 -> lchild),height(T2 -> rchild)) +1; return T2;}BiTNode *LeftRight(BiTree T) //LR型{ T -> lchild = Right(T -> lchild); return Left(T);}BiTNode *RightLeft(BiTree T) //RL型{ T -> rchild = Left(T -> rchild); return Right(T);}void add(BiTree &T, int n) //构建平衡二叉树{ if(T == NULL) { T = (BiTNode *)malloc(sizeof(BiTNode)); T -> data = n; T -> height = 1; T -> lchild = T -> rchild = NULL; } else if(n < T -> data) { add(T -> lchild, n); //平衡二叉树左右子树深度差不超过2 int balance = height(T -> rchild) - height(T -> lchild); if(balance >= 2 || balance <= -2) //判断二叉树是否平衡 { if(n < T -> lchild -> data) T = Left(T); else T = LeftRight(T); } } else if(n > T -> data) { add(T -> rchild, n); int balance = height(T -> rchild) - height(T -> lchild); if(balance >= 2 || balance <= -2) { if(n > T -> rchild -> data) T = Right(T); else T = RightLeft(T); } } T -> height = maxh(height(T -> lchild),height(T -> rchild)) +1; }int main(){ int n, x; BiTree T; T = NULL; cin >> n; while(n--) { cin >> x; add(T,x); } cout << T -> data << endl; return 0;}
阅读全文
0 0
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- Linux(1)---Ubuntu下终端的常用快捷键
- 二叉树的基本概念和主要性质
- ReactNative——Toast
- java基础----编解码 转换流
- css 浮动 相对定位 绝对定位区别
- 数据结构实验之查找二:平衡二叉树
- poi导入Excel中包含长数字变为科学技术法
- oracle 学习笔记
- phpMyadmin忘记登录密码怎么办?
- Gym 101086 A,F,G,H,L 五个水题
- bash
- 解决服务器无法在已发送 HTTP 标头之后设置状态导致的一个问题
- java.lang.UnsupportedClassVersionError
- Python基础学习