/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类 the root
* @return bool布尔型vector
*/
bool ans = true;
bool isCompleteTree(TreeNode* root) {
queue<TreeNode*> qu;
queue<int> order;
vector<int> ans;
qu.push(root);
order.push(1);
while(!qu.empty()){
int size = qu.size();
for(int i = 0;i < size;++i){
TreeNode* cur = qu.front();
int pos = order.front();
ans.push_back(pos);
order.pop();
qu.pop();
if(cur->left){
qu.push(cur->left);
order.push(pos * 2);
}
if(cur->right ){
qu.push(cur->right);
order.push(pos * 2 + 1);
}
}
}
int size = ans.size();
for(int i = 1;i <= size;++i){
if(ans[i - 1] == i);
else return false;
}
return true;
}
void mid(TreeNode* root,int &pre){
if(root == NULL)
return;
mid(root->left,pre);
if(pre > root->val){
ans = false;
return;
}
else
pre = root->val;
mid(root->right,pre);
}
vector<bool> judgeIt(TreeNode* root) {
// write code here
if(root == NULL)
return vector<bool> ({ans,true});
int pre = 0;
mid(root,pre);
return vector<bool> ({ans,isCompleteTree(root)});
}
};