C++判断完全二叉树
时间: 2023-11-27 12:47:50 浏览: 54
以下是C++判断完全二叉树的代码实现:
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isCompleteTree(TreeNode* root) {
if(!root) return true;
queue<TreeNode*> q;
q.push(root);
bool flag = false;
while(!q.empty()) {
TreeNode* cur = q.front(); q.pop();
if(!cur) {
flag = true;
continue;
}
if(flag) return false;
q.push(cur->left);
q.push(cur->right);
}
return true;
}
TreeNode* createTree(vector<int>& values) {
if(values.empty()) return NULL; TreeNode* root = new TreeNode(values[0]);
queue<TreeNode*> q;
q.push(root);
int i = 1;
while(!q.empty() && i < values.size()) {
TreeNode* cur = q.front();
q.pop();
if(values[i] != -1) {
cur->left = new TreeNode(values[i]);
q.push(cur->left);
}
i++;
if(i >= values.size()) break;
if(values[i] != -1) {
cur->right = new TreeNode(values[i]);
q.push(cur->right);
}
i++;
}
return root;
}
void destroyTree(TreeNode* root) {
if(!root) return ;
destroyTree(root->left);
destroyTree(root->right);
delete root;
}
int main() {
int num;
cin >> num;
vector<int> values(num);
for(unsigned int i=0;i<num;i++) cin >> values[i];
TreeNode* root = createTree(values);
cout << isCompleteTree(root) << endl;
destroyTree(root);
return 0;
}
```