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