/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ int height(TreeNode*root) { if(root) { int m=height(root->left); int n=height(root->right); return max(m,n)+1; } return 0; } void answer(TreeNode*root,int h,vector <vector <TreeNode*>> &ans) { if(root) { ans[h].push_back(root); answer(root->left,h+1,ans); answer(root->right,h+1,ans); } } bool isCompleteTree(TreeNode* root) { int i=0; int h=height(root); vector <vector <TreeNode*>> ans(h); answer(root,i,ans); if(h==0 || h==1) { return 1; } else { int count=1; for(i=0;i<h-1;i++) { int m=ans[i].size(); if(m!=count) { return 0; } count*=2; } count/=2; int flag=0; for(i=0;i<count;i++) { TreeNode*t=ans[h-2][i]; if(t->left) { if(flag>=1) { return 0; } } else { flag++; } if(t->right) { if(flag>=1) { return 0; } } else { flag++; } } } return 1; } };