pat 1123. Is It a Complete AVL Tree (30)
来源:互联网 发布:java线程之间的通信 编辑:程序博客网 时间:2024/05/21 14:48
https://www.patest.cn/contests/pat-a-practise/1123
参考了:http://www.liuchuo.net/archives/2732
#include <cstdio>#include <queue>using namespace std;typedef struct node {int v;struct node * left, *right;node(int x) :left(NULL), right(NULL) {v = x;}}Node;int getHeight(Node * root) {if (root == NULL) return 0;int l = getHeight(root->left);int r = getHeight(root->right);return (l < r ? r : l) + 1;}void rightRotate(Node * & root) {Node * temp = root->left;root->left = temp->right;temp->right = root;root = temp;return;}void leftRotate(Node * & root) {Node * temp = root->right;root->right = temp->left;temp->left = root;root = temp;return;}void leftRightRotate(Node * & root) {leftRotate(root->left);rightRotate(root);}void rightLeftRotate(Node * & root) {rightRotate(root->right);leftRotate(root);}void insert(Node *& root, int x) {if (root == NULL) {root = new Node(x);return;}if (x <= root->v) {insert(root->left,x);int l = getHeight(root->left);int r = getHeight(root->right);if (l - r >= 2) {if (x <= root->left->v) {rightRotate(root);}else {leftRightRotate(root);}}}else {insert(root->right, x);int l = getHeight(root->left);int r = getHeight(root->right);if (r - l >= 2) {if ( x > root->right->v) {leftRotate(root);}else {rightLeftRotate(root);}}}}bool levelOrder(Node * root, vector<int> & v) {if (root == NULL) return true;bool isComplete = true;queue<Node*> q;q.push(root);bool noChild = false;while (!q.empty()) {Node * node = q.front();//printf("q: %d ",node->v);q.pop();v.push_back(node->v);if (node->left != NULL) {if (noChild) {isComplete = false;}q.push(node->left);}else {noChild = true;}if (node->right != NULL) {if (noChild) {isComplete = false;}q.push(node->right);}else {noChild = true;}}return isComplete;}int main(){int n,a;scanf("%d", &n);Node * root =NULL;for (int i = 0; i < n; i++){scanf("%d", &a);insert(root, a);}vector<int> v;bool isComplete = levelOrder(root,v);int vSize = v.size();for (int i = 0; i < vSize; i++){if (i == 0) printf("%d", v[i]);else printf(" %d", v[i]);}printf("\n%s\n", isComplete ? "YES":"NO"); return 0;}
0 0
- PAT 1123. Is It a Complete AVL Tree (30)
- PAT--1123. Is It a Complete AVL Tree (30)
- pat 1123. Is It a Complete AVL Tree (30)
- 1123. Is It a Complete AVL Tree (30) PAT 甲级
- PAT 1123. Is It a Complete AVL Tree (30)
- PAT 甲级 1123. Is It a Complete AVL Tree (30)
- PAT(A)-1123. Is It a Complete AVL Tree (30)(AVL+bfs)
- 【PAT】1123. Is It a Complete AVL Tree
- PAT A1123. Is It a Complete AVL Tree (30)
- PAT A1123. Is It a Complete AVL Tree (30)
- PAT A1123. Is It a Complete AVL Tree (30)
- 1123. Is It a Complete AVL Tree
- 1123. Is It a Complete AVL Tree (30)-PAT甲级真题
- PAT (Advanced Level) Practise 1123. Is It a Complete AVL Tree (30)
- PAT (Advanced Level) 1123. Is It a Complete AVL Tree (30)
- 【PAT】【Advanced Level】1123. Is It a Complete AVL Tree (30)
- PAT 1123. Is It a Complete AVL Tree (30) 平衡树构建+ 完全二叉树判断
- pat甲1123. Is It a Complete AVL Tree (AVL树+层次遍历+完全二叉树)
- 关于使用EditPlus的问题
- 编译安装apach2.4.25相关,包可以官网下载
- 水平滚动_Android 自定义 HorizontalScrollView
- 修改mysql注册表
- 会话机制的一些解释与session对象
- pat 1123. Is It a Complete AVL Tree (30)
- 几种范数的简单介绍
- 网络:基本概念之HTTP、TCP/IP、UDP,Socket
- 目标检测(一)目标检测评价指标
- netty与cocos creator交互
- wildfly配置ldap
- MySQL手动安装教程
- msm8909相关事宜
- Class头类名 和 #include 头文件 的区别