完全二叉树

1. 判断是否为完全二叉树

600px
思路:层先遍历(BFS)、节点不能只出现右节点。
当节点出现了只有左节点或叶子节点时,退出BFS循环。检查剩下的节点是否都是叶子节点

class Solution {
public:
    bool isCompleteTree(TreeNode* root) {
            queue<TreeNode*> q;
        q.push(root);
        bool flg = false;
        while (!q.empty())
        {

                TreeNode* front = q.front();
                q.pop();
                if (!front->left && front->right) // 左空右有
                    return false;

                if (front->left)  q.push(front->left);
                if (front->right) q.push(front->right);

                if (flg == true && (front->left || front->right)) // flg为真,再有节点存在左右孩子就错误了
                    return false;

                if (!front->left || !front->right) // 左空或右空,说明走到叶了,flg置真
                    flg = true;
        }
        return true;

    }
};