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

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

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
     */
    bool isFirst = true;
    bool isSearchTree = true;
    int pre;
    void inOrder(TreeNode* root){
        if(root == NULL) return;
        inOrder(root -> left);
        if(isFirst){
            pre = root -> val;
            isFirst = false;
        }else{
            if(pre >= root -> val){
                isSearchTree = false;
                return;
            }
            pre = root -> val;
        }
        inOrder(root -> right);
    }
    bool isCompTree(TreeNode* root){
        if(root == NULL) return true;
        queue<TreeNode*> q;
        q.push(root);
        int size = 0;
        while(!q.empty()){ //一旦遇到NULL,则后面不能有非空节点
            TreeNode* node = q.front(); q.pop();
            if(node == NULL) break;
            q.push(node -> left);
            q.push(node -> right);
        }
        while(!q.empty() && q.front() == NULL){
            q.pop();
        }
        return q.empty();
    }
    vector<bool> judgeIt(TreeNode* root) {
        // write code here
        inOrder(root);
        return {isSearchTree, isCompTree(root)};
    }
};
全部评论

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务