数据结构实验之查找二:平衡二叉树
来源:互联网 发布:电脑网络id按钮在哪 编辑:程序博客网 时间:2024/05/17 01:07
Problem Description
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
Input
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
Output
输出平衡二叉树的树根。
Example Input
588 70 61 96 120
Example Output
70
Hint
Author
xam
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct BiTNode{ int data; BiTNode *lchild; BiTNode *rchild; int height;}BiTNode, *BiTree;int Max(int x, int y){ return x > y ? x : y;}int Deep(BiTree T){ if(T == NULL) { return -1; } return T -> height;}BiTree LLRotate(BiTree p){ BiTree p1; p1 = p -> lchild; p -> lchild = p1 -> rchild; p1 -> rchild = p; p -> height = Max(Deep(p -> lchild), Deep(p -> rchild)) + 1; p1 -> height = Max(Deep(p1 -> lchild), p -> height) + 1; return p1;}BiTree RRRotate(BiTree p){ BiTree p1; p1 = p -> rchild; p -> rchild = p1 -> lchild; p1 -> lchild = p; p -> height = Max(Deep(p -> lchild), Deep(p -> rchild)) + 1; p1 -> height = Max(Deep(p1 -> rchild), p -> height) + 1; return p1;}BiTree LRRotate(BiTree p){ p -> lchild = RRRotate(p -> lchild); return LLRotate(p);}BiTree RLRotate(BiTree p){ p -> rchild = LLRotate(p -> rchild); return RRRotate(p);}BiTree Insert(BiTree T, int x){ if(T == NULL) { T = new BiTNode; T -> data = x; T -> lchild = NULL; T -> rchild = NULL; T -> height = 0; } else { if(x < T -> data) { T -> lchild = Insert(T -> lchild ,x); if(Deep(T -> lchild) - Deep(T -> rchild) == 2) { if(x < T -> lchild -> data) { T = LLRotate(T); } else { T = LRRotate(T); } } } else { T -> rchild = Insert(T -> rchild, x); if(Deep(T -> rchild) - Deep(T -> lchild) == 2) { if(x > T -> rchild -> data) { T = RRRotate(T); } else { T = RLRotate(T); } } } } T -> height = Max(Deep(T -> lchild), Deep(T -> rchild)) + 1; return T;}int main(){ int n, x; BiTree T; T = NULL; scanf("%d", &n); while(n --) { scanf("%d", &x); T = Insert(T, x); } printf("%d\n", T -> data); return 0;}还是看了大神的代码后才想出来的
阅读全文
0 0
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- sourceInsight使用时注释不正常情况
- 每天一点小知识【6】
- 多布局
- Reverse Words in a String III
- 爱奇艺判断括号深度python代码
- 数据结构实验之查找二:平衡二叉树
- Google InnoCamp 2017 夏令营——万物互联,共享未来
- 一次读写一块字符(fread fwrite)
- 弦截法 一元非线性方程求根 C语言实现
- Banner
- sql注入
- 【Linxu内核设计与实现】-第1章 Linux内核简介
- [反思]NOIP2017棋盘
- 序列化学习