1123 Is It a Complete AVL Tree(30 分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
Now given a sequence of insertions, you are supposed to output the level-order traversal sequence of the resulting AVL tree, and to tell if it is a complete binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤ 20). Then N distinct integer keys are given in the next line. All the numbers in a line are separated by a space.

Output Specification:

For each test case, insert the keys one by one into an initially empty AVL tree. Then first print in a line the level-order traversal sequence of the resulting AVL tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line. Then in the next line, print YES if the tree is complete, or NO if not.

Sample Input 1:

5
88 70 61 63 65

Sample Output 1:

70 63 88 61 65
YES

Sample Input 2:

8
88 70 61 96 120 90 65 68

Sample Output 2:

88 65 96 61 70 90 120 68
NO
 
题意:
本题是1066题和1110题的综合,通过给定的插入序列,首先需要正确构建AVL树;其次判断该树是否为完全二叉树。
 
思路:
略。看1066题和1110题的题解即可。
 
代码:
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;

struct Node{
    int val;
    int height;//以该结点为根结点的子树高度
    Node *lchild,*rchild;
    Node(),lchild(nullptr),rchild(nullptr){}
};

int n;//结点个数

int getHeight(Node* pNode)
{
    ;
    else return pNode->height;
}

int getBalancedFactor(Node* pNode)
{
    return getHeight(pNode->lchild)-getHeight(pNode->rchild);
}

void updateHeight(Node* pNode)
{
    pNode->height=max(getHeight(pNode->lchild),getHeight(pNode->rchild))+;
}

void leftRotation(Node* &pNode)
{
    Node* temp=pNode->rchild;
    pNode->rchild=temp->lchild;
    temp->lchild=pNode;
    updateHeight(pNode);
    updateHeight(temp);
    pNode=temp;
}

void rightRotation(Node* &pNode)
{
    Node* temp=pNode->lchild;
    pNode->lchild=temp->rchild;
    temp->rchild=pNode;
    updateHeight(pNode);
    updateHeight(temp);
    pNode=temp;
}

void insert(Node* &root,int val)
{
    if(root==nullptr){
        root=new Node(val);
        return;
    }
    if(val < root->val){
        insert(root->lchild,val);
        updateHeight(root);
        ){
            ){//LL型
                rightRotation(root);
            }){//LR型
                leftRotation(root->lchild);
                rightRotation(root);
            }
        }
    }else{
        insert(root->rchild,val);
        updateHeight(root);
        ){
            ){//RR型
                leftRotation(root);
            }){//RL型
                rightRotation(root->rchild);
                leftRotation(root);
            }
        }
    }
}

//层序遍历,并判断是否为完全二叉树
bool levelOrderTraversal(Node* root)
{
    ;
    bool flag=true;
    queue<Node*> q;
    q.push(root);
    while(!q.empty()){
        Node* temp=q.front();
        q.pop();
        if(temp){
            printf("%d",temp->val);
            cnt++;
            if(cnt<n) printf(" ");
            q.push(temp->lchild);
            q.push(temp->rchild);
        }else{
            if(cnt<n) flag=false;
        }
    }
    return flag;
}

int main()
{
    int val;
    Node* root=nullptr;
    scanf("%d",&n);
    ;i<n;i++){
        scanf("%d",&val);
        insert(root,val);
    }
    bool flag=levelOrderTraversal(root);
    printf("\n%s",flag?"YES":"NO");
    ;
}

1123 Is It a Complete AVL Tree的更多相关文章

  1. PAT甲级1123. Is It a Complete AVL Tree

    PAT甲级1123. Is It a Complete AVL Tree 题意: 在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性.图1-4说明了 ...

  2. 1123. Is It a Complete AVL Tree (30)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  3. 1123 Is It a Complete AVL Tree(30 分)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  4. PAT甲级——1123 Is It a Complete AVL Tree (完全AVL树的判断)

    嫌排版乱的话可以移步我的CSDN:https://blog.csdn.net/weixin_44385565/article/details/89390802 An AVL tree is a sel ...

  5. PAT 1123 Is It a Complete AVL Tree

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  6. PAT Advanced 1123 Is It a Complete AVL Tree (30) [AVL树]

    题目 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...

  7. PAT甲级1123 Is It a Complete AVL Tree【AVL树】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805351302414336 题意: 给定n个树,依次插入一棵AVL ...

  8. PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6806292.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  9. PAT 1123. Is It a Complete AVL Tree (30)

    AVL树的插入,旋转. #include<map> #include<set> #include<ctime> #include<cmath> #inc ...

随机推荐

  1. ES6入门之对象扩展

    ES5对象(超类)原有: 属性:construct构造函数 方法: object.hasOwnProperty( propertyName ) //检测是否有一个本地的属性而不是继承的,返回boole ...

  2. Appium 测试APK

    介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持iOS.Android及FirefoxOS平台测试.Appium使用WebDriver的json w ...

  3. Valgrind的Memcheck快速入门

    一.前言        对于C/C++程序员来说,关于内存问题真是让人头痛不已,尤其是内存泄露.使用未初始化的局部变量进行跳转或移动等隐形问题.要求程序员养成良好的编码习惯确实很重要,但是人总会出现稀 ...

  4. PostgreSQL逻辑复制使用记录

    之前逻辑复制刚刚出来的时候就使用过,但是没有进行整理,这次一个项目需要逻辑复制的自动迁移,再次拾起逻辑复制. 在此之前有两个疑问: 1)同一个表,既有流复制,又有逻辑复制,这样数据会有两份吗? --不 ...

  5. c# Request.Files["xx"]取不到值解决办法

  6. 【跟着stackoverflow学Pandas】Delete column from pandas DataFrame-删除列

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

  7. MySQL中的锁理解

    1.目的:解决客户端并发访问的冲突问题 2.锁的分类 1.锁类型 1.读锁(共享锁) 查询(select):加读锁之后,别人不能更改表记录,但是可以进行查询. 2.写锁(互斥锁,排他锁) 更新(upd ...

  8. 【Python】下载图片

    import requests import bs4 import urllib.request import urllib import os hdr = {'User-Agent': 'Mozil ...

  9. [转载]Unicode中对中文字符的编码

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

  10. 通过拖拽prefab来存储相应的路径

    更新了一下,支持数组和嵌套数据结构. using UnityEngine; using System.Collections; using UnityEditor; using System.Refl ...