题解 | #判断一棵二叉树是否为搜索二叉树和完全二叉树#

判断一棵二叉树是否为搜索二叉树和完全二叉树

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;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务