中序遍历+层序遍历

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型vector
     */
    bool isFirst = true;
    bool isSearchTree = true;
    int pre;
    void inOrder(TreeNode* root){
        if(root == NULL) return;
        inOrder(root -> left);
        if(isFirst){
            pre = root -> val;
            isFirst = false;
        }else{
            if(pre >= root -> val){
                isSearchTree = false;
                return;
            }
            pre = root -> val;
        }
        inOrder(root -> right);
    }
    bool isCompTree(TreeNode* root){
        if(root == NULL) return true;
        queue<TreeNode*> q;
        q.push(root);
        int size = 0;
        while(!q.empty()){ //一旦遇到NULL,则后面不能有非空节点
            TreeNode* node = q.front(); q.pop();
            if(node == NULL) break;
            q.push(node -> left);
            q.push(node -> right);
        }
        while(!q.empty() && q.front() == NULL){
            q.pop();
        }
        return q.empty();
    }
    vector<bool> judgeIt(TreeNode* root) {
        // write code here
        inOrder(root);
        return {isSearchTree, isCompTree(root)};
    }
};