题解 | #判断一棵二叉树是否为搜索二叉树和完全二叉树#
判断一棵二叉树是否为搜索二叉树和完全二叉树
http://www.nowcoder.com/practice/f31fc6d3caf24e7f8b4deb5cd9b5fa97
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类 the root
* @return bool布尔型vector
*/
void inorder(TreeNode* root,vector<int>& res){//中序遍历
if(root==nullptr) return;
inorder(root->left,res);
res.push_back(root->val);
inorder(root->right,res);
return;
}
bool CompeleteTree(TreeNode* root){//层次遍历,遇到空节点就把之后的空节点全pop了,如果还空,说明完全二叉
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* tmp = q.front();
if(tmp==nullptr) break;
q.pop();
q.push(tmp->left);
q.push(tmp->right);
}
while(q.size()>0&&q.front()==nullptr) q.pop();
return q.empty();
}
vector<bool> judgeIt(TreeNode* root) {
if(root==nullptr) return{true,true};
vector<int> inorderRes;
inorder(root,inorderRes);
vector<bool> res(2,false);
res[0]=true;
for(int i = 0;i<inorderRes.size()-1;i++){
if(inorderRes[i]>=inorderRes[i+1]){
res[0]=false;
break;
}
}
res[1] = CompeleteTree(root);
return res;
}
};