层次遍历判断是否是完全二叉树, 中序遍历判断是否是二叉搜索树

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型vector
     */
    long last = -0x3f3f3f3f3f;
    vector<bool> judgeIt(TreeNode* root) {
        // write code here
        bool flag = 1;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
            auto p = q.front();
            q.pop();
            if(!q.empty() && p->val == 0x3f3f3f3f && q.front()->val != 0x3f3f3f3f){
                flag = 0;
                break;
            }
            if(p->val != 0x3f3f3f3f) {
                if(p->left) q.push(p->left);
                else q.push(new TreeNode(0x3f3f3f3f));

                if(p->right) q.push(p->right);
                else q.push(new TreeNode(0x3f3f3f3f));
            }
        }
        return {dfs(root), flag};
    }
    bool dfs(TreeNode *root) {
        if(!root) return true;
        bool l = dfs(root->left);
        if(!l || last > root->val) return false;
        last = root->val;
        return dfs(root->right);
    }
};