题目描述
给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。
示例1
输入
复制
{2,1,3}
返回值
复制
[true,true]
算法
- 判断中序是否是严格升序,如果是,说明是BST
- 满二叉树,最后一层 最左边,一定是非空节点,也就是 空节点不能在非空节点前面
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类 the root
* @return bool布尔型vector
*/
vector<bool> judgeIt(TreeNode* root) {
// write code here
// vector<int>x;
preNode = NULL;
bool f = isBST(root);
bool a = isComplete(root);
return {f,a};
}
TreeNode* preNode;
bool isBST(TreeNode*root) {
if(root) {
if(!isBST(root->left)) return false;
if(preNode && preNode->val >= root->val) return false;
preNode = root;
return isBST(root->right);
}
return true;
}
bool isComplete(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
while (q.front()) {
TreeNode* x = q.front();q.pop();
q.push(x->left);
q.push(x->right);
}
while(q.size() && q.front()==NULL) q.pop();
return q.empty();
}
};