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. 《Effective C++》第2章 构造/析构/赋值运算(2)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  2. NI FPGA板卡程序设计概述

    NI公司提到了三种不同应用开发环境ADE:http://www.ni.com/white-paper/5956/zhs/ LabVIEW是NI公司主推的ADE,采用G语言(图像化语言),支持力度最大 ...

  3. Flask_script扩展调用的方式

    Flask中flask-script扩展的使用 通过使用Flask-Script扩展,我们可以在Flask服务器启动的时候,通过命令行的方式传入参数.而不仅仅通过app.run()方法中传参 Flas ...

  4. 启动Windows防火墙提示“0x8007042c"

    win8.1 启动防火墙是报错:启动Windows防火墙提示“0x8007042c" 一.检查服务 1,右击开始->运行->输入“services.msc” 打开服务 在框中找到 ...

  5. v-if和v-show小对比

    相同点 都可以控制元素的显示与不显示.在判断DOM节点是否要显示. 不同点 1.实现方式 v-if是根据后面的数据的真假判断直接从DOM树上删除或重建元素节点. v-show 只是修改元素的css的样 ...

  6. 网络编程 socket编程 - Asyncsocke

    简单的聊天程序:http://blog.csdn.net/chang6520/article/details/7967662 iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 c ...

  7. sublime text3安装以及插件配置教程

    http://blog.csdn.net/feizaosyuacm/article/details/54729891 本文是安装的Sublime Text3是portable version(可移动版 ...

  8. BZOJ2259 [Oibh]新型计算机 【傻逼最短路】

    Description Tim正在摆弄着他设计的"计算机",他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算 ...

  9. Quartz 2D编程指南- PDF文档的创建、显示及转换

    PDF文档存储依赖于分辨率的向量图形.文本和位图,并用于程序的一系列指令中.一个PDF文档可以包含多页的图形和文本.PDF可用于创建跨平台.只读的文档,也可用于绘制依赖于分辨率的图形.         ...

  10. vmware linux nat模式设置静态ip

    网上资料很多,但是都不怎么实用,这里给大家总结一下.nat模式上网.因为nat本身就能上网为什么还要设置ip.这有点自找麻烦.但是在集群这是必须的.要么你搭建伪分布,要么至少具有三台物理机器.为了节省 ...