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

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

http://www.nowcoder.com/practice/f31fc6d3caf24e7f8b4deb5cd9b5fa97

  1. 对于是否为BST,中序遍历递增就行(不能有等号)
  2. 对于是否为Full,层序遍历,添加是否第一次遇到empty就行,如果第二次在有子树的时候,遇到了empty=true,那就是不满足。因为我们遍历时先左后右得。而满二叉树只允许最右边的有一个孩子的时候且必须在左边。
/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */



class Solution {
public:

    TreeNode* pre = new TreeNode(-1000000);//作为假的第一个节点
    bool ISBST(TreeNode* root){

        if(!root) return true;// 结点为空返回true

        bool left = ISBST(root->left);// 判断左子树是否有序

        bool cur = pre->val < root ->val;// 判断当前节点是否有序
        pre = root;// 按中序遍历,记录前一个指针

        bool right = ISBST(root->right);// 判断右子树是否有序


        return left&&cur&&right;

    }


    //层序遍历
    bool ISFULL(TreeNode* root){

        if(!root) return true;

        bool isEmpty = false;//遇到得第一个空树。(如果是最后遇到的,没有一点问题,但是在中途遇到,就会有问题)

        queue<TreeNode*> q;
        q.push(root);

        while(!q.empty()){
            TreeNode* node= q.front();
            q.pop();

            if(node->left){
                if(isEmpty) return false; // 前面遇到空节点,此次还遇到了非空节点返回 false

                q.push(node->left);

            }else isEmpty = true;//此次遇到了空节点

            //如果左空右不空,也是false

            if(node->right){
                if(isEmpty) return false; // 前面遇到空节点,此次还遇到了非空节点返回 false

                q.push(node->right);

            }else isEmpty = true;//此次遇到了空节点


        }

        return true;

    }
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型vector
     */
    vector<bool> judgeIt(TreeNode* root) {
        // write code here
        bool r1 = ISBST(root);
        bool r2 = ISFULL(root);

        return {r1,r2};
    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面4人在聊
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务