跳转至

Leetcode 901-1000

958. Check Completeness of a Binary Tree (Medium)

判断一棵树是不是完全二叉树 Complete Binary Tree

完全二叉树指最多只有最后一层不满,且不满的一层所有元素必须靠左排列

Input: [1,2,3,4,5,null,7]
Output: false
Explanation: The node with value 7 isn't as far left as possible.

思路

层次遍历二叉树,发现一个点没有孩子后(按顺序,如果没有左孩子,这个节点也不能有右节点),之后的节点都不能有孩子

bool isCompleteTree(TreeNode* root) {
    if (root == nullptr) return true;
    queue<TreeNode*> q;
    q.push(root);
    bool hasChild = true;
    while(!q.empty()) {
        int size = q.size();
        while (size --) {
            TreeNode* node = q.front();
            q.pop();
            if (node->left == nullptr && node->right != nullptr) return false;
            if (!hasChild && node->left != nullptr) return false;
            if (node->left == nullptr || node->right == nullptr) hasChild = false;
            if (node->left != nullptr) q.push(node->left);
            if (node->right != nullptr) q.push(node->right);
        }
    }
    return true;
}