层次遍历判断是否是完全二叉树, 中序遍历判断是否是二叉搜索树
/** * 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); } };