PAT甲1123Is It a Complete AVL Tree (30) --AVL
来源:互联网 发布:打车软件对比分析 编辑:程序博客网 时间:2024/06/04 18:10
题意很简单,按avl数进行插入操作,最后进行层序遍历输出,判断是不是一个完全二叉树。
还是太菜,
avl没写出来。。。
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;struct node { int num, h; node *left, *right;};int height(node *t) { if (t == NULL) return 0; else return t->h;}node *llRotate(node *r) { node *t = r->left; r->left = t->right; t->right = r; r->h = max(height(r->left), height(r->right)) + 1; t->h = max(height(t->left), height(t->right)) + 1; return t;}node *rrRotate(node *r) { node *t = r->right; r->right = t->left; t->left = r; r->h = max(height(r->left), height(r->right)) + 1; t->h = max(height(t->left), height(t->right)) + 1; return t;}node *lrRotate(node *r) { r->left = rrRotate(r->left); return llRotate(r);}node *rlRotate(node *r) { r->right = llRotate(r->right); return rrRotate(r);}node *insert(node *r, int x) { if (r == NULL) { node *t = (node *) malloc(sizeof(node)); t->num = x; t->h = 1; t->left = t->right = NULL; //printf("%d\n", t->num); return t; } if (x < r->num) { r->left = insert(r->left, x); if (height(r->left) - height(r->right) == 2) { if (x < r->left->num) r = llRotate(r); else r = lrRotate(r); } } else { r->right = insert(r->right, x); if (height(r->right) - height(r->left) == 2) { if (x > r->right->num) r = rrRotate(r); else r = rlRotate(r); } } r->h = max(height(r->left), height(r->right)) + 1; return r;}int main() { int n; scanf("%d", &n); node *root = NULL; for (int i = 0; i < n; i++) { int x; scanf("%d", &x); root = insert(root, x); } queue<node*> q; q.push(root); bool flag = true, end = false; bool first = true; while (!q.empty()) { node *t = q.front(); q.pop(); if (t->left) q.push(t->left); if (t->right) q.push(t->right); if (flag) { if (!(t->left) && t->right) flag = false; else if (!end && (!(t->left) || !(t->right))) end = true; else if (end && (t->left || t->right)) flag = false; } if (first) { first = false; printf("%d", t->num); } else printf(" %d", t->num); } putchar('\n'); puts(flag?"YES":"NO"); return 0;}
0 0
- PAT甲1123Is It a Complete AVL Tree (30) --AVL
- PAT 1123. Is It a Complete AVL Tree (30)
- PAT--1123. Is It a Complete AVL Tree (30)
- PAT A1123. 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 A1123. Is It a Complete AVL Tree (30)
- PAT 1123. Is It a Complete AVL Tree (30)
- PAT A1123. 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 (AVL树+层次遍历+完全二叉树)
- PAT (Advanced Level) Practise 1123Is It a Complete AVL Tree (30)
- PAT (Advanced Level) Practise 1123 Is It a Complete AVL Tree (30)
- 【PAT】1123. Is It a Complete AVL Tree
- PAT A1123. Is It a Complete AVL Tree
- 1123. Is It a Complete AVL Tree
- 1123. Is It a Complete AVL Tree (30)-PAT甲级真题
- 欢迎使用CSDN-markdown编辑器
- Linux-shell编程之条件判断与流程控制
- Linux 下wifi 驱动开发(二)—— WiFi模块浅析
- 在HP-UX PA-RISC 平台下 RAC中CSSD failure但是节点不重启的问题
- 主瓣、栅瓣和旁瓣的定义
- PAT甲1123Is It a Complete AVL Tree (30) --AVL
- 交换俩个数组中的元素 用函数完成
- A + B Problem
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
- web.py中如何返回Content-Length
- SVG和Canvas的区别
- vmware安装linux 成功后网络无连接的问题解决方案
- Android面试题及答案大全
- Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析