1066 Root of AVL Tree (25 分)
题目传送门:1066 Root of AVL Tree (25 分)
一、题目大意
给定一个数列,创建平衡二叉查找树
二、解题思路
这道题就是一个赤裸裸的构建平衡树的问题,然而我之前一直没有写过平衡树的代码,因为对平衡树的旋转不太理解。这次我不想绕过这个知识盲点了,在网上搜了博客学习平衡树的知识。
平衡树(AVL)的旋转操作参考了这篇博客:AVL平衡二叉树中旋转操作的本质及其实现
这篇博客写的非常好,我看完之后就理解了AVL的旋转过程并用代码实现了出来。
三、AC代码
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int val, height;
Node *left, *right;
Node(int val):val(val), height(0){
left=NULL;
right=NULL;
}
};
int getHeight(Node* root){
if(root == NULL)return -1;
return root->height;
}
Node* singleRotateWithRight(Node* root){
// 右子树左旋
Node* k = root->right;
root->right = k->left