1110. Complete Binary Tree (25)[完全二叉树]
2017-05-17 22:53
615 查看
1. 原题:https://www.patest.cn/contests/pat-a-practise/1110
2. 思路:
题意:完全二叉树题。判断一棵树是否CBT。思路:
完全二叉树的特点:叶子结点只能在最后出现,不能夹在非叶子结点间。
直接用层序遍历好了。
利用队列进行bfs(广度搜索),当遍历到结点是-1(表示空),则已遍历的结点数
应该为N,则是CBT。
最后一个结点遍历的时候更新即可。
已AC。
3. 源码:
#include <iostream> #include <vector> #include <queue> #include <string> using namespace std; struct Node //存储结点信息 { int m_left, m_right; }; int main() { //freopen("in.txt", "r", stdin); int N; cin >> N; vector<Node> v(N);//存储二叉树结点 vector<int> child(N, 0);//用了判断根 for (int i = 0; i < N; i++) { string a, b;//注意,不能用char,数字可能大于9. cin >> a >> b; if (a == "-") { v[i].m_left = -1; } else { sscanf(a.c_str(), "%d", &v[i].m_left);//字符串转数字 child[v[i].m_left] = 1; } if (b == "-") { v[i].m_right = -1;//表示子结点空 } else { sscanf(b.c_str(), "%d", &v[i].m_right); child[v[i].m_right] = 1; } } int root; for (int i = 0; i < N; i++)//找到根结点 { if (child[i] == 0) { root = i; break; } } queue<int> Q; Q.push(root); int cnt = 0; int lastNode; while (!Q.empty()) { int curNode = Q.front();//遍历的当前结点 Q.pop(); if (curNode != -1) { cnt++; lastNode = curNode;//更新最后一个结点 Q.push(v[curNode].m_left); Q.push(v[curNode].m_right); } else { if (cnt == N) { cout << "YES " << lastNode << endl; break; } else { cout << "NO " << root << endl; break; } } } return 0; }
相关文章推荐
- 1110. Complete Binary Tree (25)完全二叉树
- PAT - 甲级 - 1110. Complete Binary Tree (25) (判断完全二叉树+建树)
- 1110. Complete Binary Tree (25) 完全二叉树、树的遍历
- PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)
- PAT 1110. Complete Binary Tree (25) 完全二叉树判断
- [二叉树建树&完全二叉树判断] 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25) -- 完全二叉树相关性质, 求树根两种方法
- 1110. Complete Binary Tree (25) <完全二叉树>
- 【PAT】【Advanced Level】1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- PAT(A) - 1110. Complete Binary Tree (25)
- pat甲1110. Complete Binary Tree(完全二叉树)
- solution Of Pat 1110. Complete Binary Tree (25)
- PAT 甲级 1110. Complete Binary Tree (25)
- pat 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)解题报告
- 1110. Complete Binary Tree (25)-PAT甲级真题
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- PAT (Advanced Level) 1110. Complete Binary Tree (25)