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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型vector
     */
    // 判断是不是二叉搜索树(中序遍历)
    TreeNode* pre = nullptr;
    bool isSearchTree(TreeNode* root) {
        if(root == nullptr) return true;
        if(!isSearchTree(root->left)) return false;
        if(pre && pre->val >= root->val) return false;
        pre = root;
        return isSearchTree(root->right);
    }
    // 判断是不是完全二叉树(层序遍历)
    bool isFullTree(TreeNode* root) {
        if(root == nullptr) return true;
        queue<TreeNode*> que;
        que.emplace(root);
        bool flag = false;    // 出现叶子节点的标记
        while(!que.empty()) {
            auto cur = que.front();
            que.pop();
            if(cur == nullptr) { // 出现了叶子节点(为空的节点)
                flag = true;
                continue;
            }
            if(flag) {    // 前面出现了叶子节点,而当前节点又不是空
                return false;
            }
            que.emplace(cur->left);
            que.emplace(cur->right);
        }
        return true;
    }
    vector<bool> judgeIt(TreeNode* root) {
        vector<bool> ans{isSearchTree(root), isFullTree(root)};
        return ans;
    }
};