958. 二叉树的完全性检验 - 力扣(LeetCode)
层次遍历的思路:
class Solution {
public:
bool isCompleteTree(TreeNode* root) {
if(!root) return true;
queue<TreeNode*> q;
q.push(root);
while(q.front()){//遇到第一个空节点就停止遍历
auto cur = q.front();
q.pop();
q.push(cur->left);
q.push(cur->right);
}
while(!q.empty()) {//查看后面是否还有空节点
if (q.front()) return false;//后面还有节点
q.pop();
}
return true;
}
};
换个写法:
class Solution {
public:
bool isCompleteTree(TreeNode* root) {
if (!root) return true;
queue<TreeNode*> q;
q.push(root);
bool flag = false;//标记前面是否存在null指针
while(!q.empty()){
auto cur = q.front();
q.pop();
if(cur->left){
if(flag) return false;
q.push(cur->left);
}else flag = true;
if(cur->right){
if(flag) return false;
q.push(cur->right);
}else flag = true;
}
return true;
}
};