题解 | #判断是不是完全二叉树#
判断是不是完全二叉树
https://www.nowcoder.com/practice/8daa4dff9e36409abba2adbe413d6fae
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ int depthoftree(struct TreeNode* root){ if(!root) return 0; return 1+fmax(depthoftree(root->left),depthoftree(root->right)); } bool isCompleteTree(struct TreeNode* root ) { if(!root) return true; if(!root->left&&!root->right) return true; int depth = depthoftree(root); int num = 1; struct TreeNode* queue[200]; struct TreeNode* temp; int front=0,rear=0,i=0; queue[rear++] = root; while(front<rear){ int last = rear; int flag = 0; while(front<last){ temp = queue[front++]; if(num<depth-1){ if(!temp->left||!temp->right) return false; } if(num==depth-1){ if(temp->right&&!temp->left) return false; if(temp->left||temp->right){ if(flag) return false; } if((!temp->left||!temp->right)&&flag==0) flag=1; } if(temp->left) queue[rear++]=temp->left; if(temp->right) queue[rear++] = temp->right; } num++; } return true; }