完全二叉树的判断(PAT甲级 1110)
2018-03-20 21:23
351 查看
题目链接 https://www.patest.cn/contests/pat-a-practise/1110
【题意】
给定一颗二叉树,判断其是否为一颗完全二叉树
【输入格式】
单组输入,第一行给出一个正整数N(N<=20),它是树中节点的总数,节点的编号从0到N-1。 然后跟着N行,每行对应一个节点,并给出节点的左侧和右侧子节点的编号。 如果子结点不存在,则用“-”代替。
【输出格式】
如果树是完全二叉树,则打印“YES”,并且打印树上最后一个节点的编号,如果不是,则打印“NO”和根结点的标号,中间用空格隔开。
【思路】
数据结构基础题,用一个结构体数组记录一颗二叉树的数据结构,结构体中有par,lson,rson分别代表当前结点的父亲结点,左结点和右结点,均初始化为-1表示不存在。有了这样一个数组后,我们可以从根结点开始进行bfs,当bfs队列的队头元素为-1时跳出循环,根据完全二叉树的性质,如果这时已经访问完所有的树结点,那么这棵树就是一颗完全二叉树,否则一定不是一颗完全二叉树。
【题意】
给定一颗二叉树,判断其是否为一颗完全二叉树
【输入格式】
单组输入,第一行给出一个正整数N(N<=20),它是树中节点的总数,节点的编号从0到N-1。 然后跟着N行,每行对应一个节点,并给出节点的左侧和右侧子节点的编号。 如果子结点不存在,则用“-”代替。
【输出格式】
如果树是完全二叉树,则打印“YES”,并且打印树上最后一个节点的编号,如果不是,则打印“NO”和根结点的标号,中间用空格隔开。
【思路】
数据结构基础题,用一个结构体数组记录一颗二叉树的数据结构,结构体中有par,lson,rson分别代表当前结点的父亲结点,左结点和右结点,均初始化为-1表示不存在。有了这样一个数组后,我们可以从根结点开始进行bfs,当bfs队列的队头元素为-1时跳出循环,根据完全二叉树的性质,如果这时已经访问完所有的树结点,那么这棵树就是一颗完全二叉树,否则一定不是一颗完全二叉树。
#include<bits/stdc++.h> using namespace std; const int maxn = 25; int n, root, last; struct node { int par, lson, rson; }tree[maxn]; bool bfs() { for (int i = 0; i<n; ++i) { if (tree[i].par == -1) { root = i; break; } } int cnt = 0; queue<int> que; que.push(root); while (!que.empty()) { int cur = que.front(); que.pop(); if (cur == -1) break; else { ++cnt; last = cur; que.push(tree[cur].lson); que.push(tree[cur].rson); } } return cnt == n; } int main() { scanf("%d", &n); for (int i = 0; i<n; ++i) { tree[i].par = tree[i].lson = tree[i].rson = -1; } for (int i = 0; i<n; ++i) { char s1[5], s2[5]; int le, ri; scanf("%s%s", s1, s2); if (s1[0] == '-') tree[i].lson = -1; else { le = atoi(s1); tree[i].lson = le; tree[le].par = i; } if (s2[0] == '-') tree[i].rson = -1; else { ri = atoi(s2); tree[i].rson = ri; tree[ri].par = i; } } if (bfs()) printf("YES %d\n", last); else printf("NO %d\n", root); return 0; }
相关文章推荐
- *浙大PAT甲级 1110 判断是否为完全二叉树
- PAT - 甲级 - 1110. Complete Binary Tree (25) (判断完全二叉树+建树)
- PAT-A1110. 二叉树-完全二叉树的判断
- PAT 1110. Complete Binary Tree (25) 完全二叉树判断
- PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)
- 1110. Complete Binary Tree (25) PAT 甲级
- [二叉树建树&完全二叉树判断] 1110. Complete Binary Tree (25)
- PAT 1123. Is It a Complete AVL Tree (30) 平衡树构建+ 完全二叉树判断
- pat甲1110. Complete Binary Tree(完全二叉树)
- 浙大pat | 浙大pat 牛客网甲级 1098. Insertion or Heap Sort (25)判断是哪种排序方式
- 1110. Complete Binary Tree (判断完全二叉树)
- [PAT甲级]1015. Reversible Primes (20)(可逆素数判断)
- 浙大pat | 浙大pat 牛客网甲级1061 Insert or Merge (25)判断是插入排序还是归并排序
- PAT 甲级 1116. Come on! Let's C (20) 【循环判断】
- pat1123 Is It a Complete AVL Tree,平衡二叉树的建立,完全二叉树判断,层序
- PAT甲级1110
- 1110. Complete Binary Tree (25)-PAT甲级真题
- PAT 甲级 1110. Complete Binary Tree (25)
- L2-012. 关于堆的判断-PAT甲级真题(堆的建立,向上调整)
- 1044. Shopping in Mars (25)-PAT甲级真题(二分查找)