c++判断完全二叉树,第一行输入n表示结点个数(n<10000),第二行和第三行分别输入n个[1,n]内的正整数,表示后序序列和中序序列。这些数由一个空格隔开,行末没有空格,输出该二叉树是否为完全二叉树,0代表否,1代表是。
时间: 2024-02-01 16:13:07 浏览: 139
判断一棵二叉树是否为完全二叉树,需要对其进行层次遍历。具体方法是,从根节点开始,将其加入队列中,并标记其层数为1。然后按照广度优先的方式遍历整棵树,对于每个节点,如果其左子节点非空,则将其左子节点加入队列中,并标记其层数为当前节点层数加1;如果其右子节点非空,则将其右子节点加入队列中,并标记其层数为当前节点层数加1。遍历完整个树后,如果最后一个节点的层数等于总层数(即树的高度),则说明该树为完全二叉树。
以下是完整的C++代码实现:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 10005;
int n;
int postOrder[MAXN], inOrder[MAXN];
bool isCompleteTree() {
queue<pair<int, int>> q;
q.push(make_pair(1, 1));
int i = 1;
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (p.second != i++) {
return false;
}
if (p.first * 2 <= n) {
q.push(make_pair(p.first * 2, p.second * 2));
}
if (p.first * 2 + 1 <= n) {
q.push(make_pair(p.first * 2 + 1, p.second * 2 + 1));
}
}
return true;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> postOrder[i];
}
for (int i = 1; i <= n; i++) {
cin >> inOrder[i];
}
if (isCompleteTree()) {
cout << "1" << endl;
} else {
cout << "0" << endl;
}
return 0;
}
```
阅读全文