Root of AVL Tree

题面

样例输入1:
5
88 70 61 96 120
样例输出1:
70

样例输入2:
7
88 70 61 96 120 90 65
样例输出2:
88

题意:将输入调整为平衡二叉树(AVL),输出根结点元素
解题思路:判断插入结点对现有结点的平衡因子的影响,进而进行LL,LR,RL,RR旋转
假设三个结点连接关系为A->B->C,C为新插入结点并使得A的平衡因子==2
若C在A的左孩子的左子树上,则对A与B进行LL旋转
若C在A的左孩子的右子树上,则对A,B,C进行LR旋转,可分解为首先对B与C进行RR旋转,再对A与C进行LL旋转
若C在A的右孩子的右子树上,则对A与B进行RR旋转
若C在A的右孩子的左子树上,则对A,B,C进行RL旋转,可分解为首先对B与C进行LL旋转,再对A与C进行RR旋转

用一个递推实现一下就可以了…

见代码:

#include <bits/stdc++.h>
typedef struct AVLTreeNode{
   
    int Data;
    AVLTreeNode *Left;
    AVLTreeNode *Right;
    int Height;
}nAVLTree , *pAVLTree;
pAVLTree AVLInsertion(int nodeValue , pAVLTree pAvl);
int GetALVHeight(pAVLTree);
pAVLTree SingleLeftRotation(pAVLTree);
pAVLTree DoubleLeftRotation(pAVLTree);
pAVLTree SingleRightRotation(pAVLTree);
pAVLTree DoubleRightRotation(pAVLTree);
int Max(int hight1 , int hight2);
using namespace std;
int main() {
   
    int num;
    int i;
    int value;
    pAVLTree pAvl;
    pAvl = NULL;
    cin >> num;
    for (i 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值