其它pta数据结构编程题请参见:pta

这道题考察平衡二叉查找树的插入。

为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整。

分为以下四种情况:

插入新节点后,以及旋转之后,需要更新结点的高度。

RL旋转可以通过右孩子的LL旋转,然后当前节点的RR旋转实现。

同理,LR旋转可以通过左孩子的RR旋转,然后当前节点的LL旋转实现。

 #include <iostream>
using namespace std; typedef struct Node *Tree;
struct Node
{
int data;
Tree left;
Tree right;
int height;
}; Tree insert(Tree T, int X);
Tree ll(Tree A);
Tree lr(Tree A);
Tree rr(Tree A);
Tree rl(Tree A);
int getHeight(Tree T);
int max(int a, int b);
Tree createNode(int X); int main()
{
int N, X, i;
cin >> N >> X;
Tree root = createNode(X);
for (i = ; i < N; i++)
{
cin >> X;
root = insert(root, X);
}
cout << root->data;
return ;
} Tree insert(Tree T, int X)
{
if (!T)
T = createNode(X);
else if (X < T->data)
{
T->left = insert(T->left, X);
if (getHeight(T->left) - getHeight(T->right) == )
{
if (X < T->left->data)
T = ll(T);
else
T = lr(T);
}
}
else if (X > T->data)
{
T->right = insert(T->right, X);
if (getHeight(T->right) - getHeight(T->left) == )
{
if (X > T->right->data)
T = rr(T);
else
T = rl(T);
}
}
T->height = max(getHeight(T->left), getHeight(T->right)) + ;
return T;
} Tree ll(Tree A)
{
Tree B = A->left;
A->left = B->right;
B->right = A;
A->height = max(getHeight(A->left), getHeight(A->right)) + ;
B->height = max(getHeight(A->left), A->height) + ;
return B;
} Tree rr(Tree A)
{
Tree B = A->right;
A->right = B->left;
B->left = A;
A->height = max(getHeight(A->left), getHeight(A->right)) + ;
B->height = max(A->height, getHeight(B->right)) + ;
return B;
} Tree lr(Tree A)
{
A->left = rr(A->left);
return ll(A);
} Tree rl(Tree A)
{
A->right = ll(A->right);
return rr(A);
} int getHeight(Tree T)
{
if (T == NULL) return ;
else return T->height;
} int max(int a, int b)
{
return a > b ? a : b;
} Tree createNode(int X)
{
Tree T;
T = new Node;
T->data = X;
T->left = T->right = NULL;
T->height = ;
return T;
}

pta 编程题10 Root of AVL Tree的更多相关文章

  1. PTA (Advanced Level) 1066 Root of AVL Tree

    Root of AVL Tree An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of ...

  2. PTA 04-树5 Root of AVL Tree (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/668 5-6 Root of AVL Tree   (25分) An AVL tree ...

  3. 04-树4. Root of AVL Tree (25)

    04-树4. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  4. pat04-树4. Root of AVL Tree (25)

    04-树4. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  5. pat1066. Root of AVL Tree (25)

    1066. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  6. pat 甲级 1066. Root of AVL Tree (25)

    1066. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  7. PAT-1066(Root of AVL Tree)Java语言实现

    Root of AVL Tree PAT-1066 这是关于AVL即二叉平衡查找树的基本操作,包括旋转和插入 这里的数据结构主要在原来的基础上加上节点的高度信息. import java.util.* ...

  8. 04-树5 Root of AVL Tree + AVL树操作集

    平衡二叉树-课程视频 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the tw ...

  9. PAT 1066 Root of AVL Tree[AVL树][难]

    1066 Root of AVL Tree (25)(25 分) An AVL tree is a self-balancing binary search tree. In an AVL tree, ...

随机推荐

  1. [CentOS7] iconv编程转换

    声明:本文主要总结自:鸟哥的Linux私房菜-第九章.vim 程式編輯器,如有侵权,请通知博主 (-- 源自鸟哥的私房菜) 首先用Notepad++新建个文件来做这个实验,在Windows平台下新建个 ...

  2. CodeForces 106C 【DP】

    题意: n g dough  m种商品? 每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriks rest c0 dough -> d0 ...

  3. PAT 1087【二级最短路】

    二级最短路+二级最短路,就是DP过程吧. 代码稍微注释一些,毕竟贴代码不好.. #include<bits/stdc++.h> using namespace std; typedef l ...

  4. 【转】C# String 前面不足位数补零的方法

    源地址:http://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html

  5. bzoj2502: 清理雪道(有源汇有上下界最小流)

    传送门 别说话,自己看,我不会->这里 我这里用的建图方法是先跑一次最大流,连上$(t,s,inf)$之后再跑一遍,然后答案就是之前连的那条边的反向边的流量 据说还有种方法是连上$(t,s,in ...

  6. Mysql缓存的配置和使用

    在mysql服务器高负载的情况下,必须采取一种措施给服务器减轻压力,减少服务器的I/O操作.一般采用的方法是优化sql操作语句,优化服务器的配置参数,从而提高服务器的性能.Mysql使用了几种内存缓存 ...

  7. docker下载安装教程(Linux系统)

    原文链接:http://www.studyshare.cn/blog-front//software/details/1160/0一.检查 1.检查安装的docker 命令:yum list inst ...

  8. web安全深度剖析pdf

    Web安全深度剖析.pdf_免费高速下载|百度网盘-分享无限制 链接:https://pan.baidu.com/s/1kVwP7SF

  9. ECharts 上手

    一.获取 ECharts 你可以通过以下几种方式获取 ECharts. 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载 ...

  10. MySQL服务器与MySQL57服务器区别与不同处在哪里,他们各自的领域范围,能不能同时启动服务?

    安装了MySQL-5.7.18.0版本数据库,版本中包含了MySQL Workbench可视化试图工具,在服务列表栏中会有MySQL的两个服务器:如果启动第一项MySQL服务器就只能操作数据库,外界不 ...