leetcode - 958. 二叉树的完全性检验
题目
代码
#include
#include
using namespace std;
typedef struct TreeNode{
int val;
struct TreeNode *left, *right;
}TreeNode, *BiTree;
void create(BiTree &root){
int tn;
cin>>tn;
if(tn == -1){
root = NULL;
return;
}
root = new TreeNode;
root->val = tn;
create(root->left);
create(root->right);
}
bool isCompleteTree(TreeNode* root) {
if(!root){
return true;
}
queue q;
q.push(root);
int num = 1;
int flag = 1;
while(!q.empty()){
int n = q.size();
for(int i = 0; i < n; i++){
TreeNode *node = q.front();
q.pop();
if(flag == 0 && (node->left || node->right)){
return false;
}
if(node->left || node->right){
if(n != num){
return false;
}
if(!node->left && node->right){
return false;
}
if(node->left){
q.push(node->left);
}
if(node->right){
q.push(node->right);
}
}else{
flag = 0;
}
if(node->left && !node->right){
flag = 0;
}
}
num *= 2;
flag = 1;
}
return true;
}
int main(){
TreeNode* root;
bool res;
create(root);
res = isCompleteTree(root);
if(res){
cout<<"true";
}else{
cout<<"false";
}
return 0;
}