题解 | #判断是不是二叉搜索树#

判断是不是二叉搜索树

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

判断是不是二叉搜索树

题目描述

给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。

二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。

方法一:递归的方法

解题思路

对于本题,采用递归的方法进行求解,对于当前节点,如果其值小于左区间或者大于右区间,返回false。否则,对其左右子树进行递归,采用同样的操作,最后如果没有返回false,则满足题目条件,返回true即可。

alt

解题代码

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return dfs(root,INT_MIN,INT_MAX);//根节点的区间范围为int的范围
    }
    bool dfs(TreeNode* root,int l,int r){
        if(root==nullptr)
        {
            return true;
        }
        if(root->val<l||root->val>r)//如果当前节点的值小于左区间或者大于右区间,则返回false
        {
            return false;
        }
        return dfs(root->left,l,root->val)&&dfs(root->right,root->val,r);
    }
};

复杂度分析

时间复杂度:一次遍历,因此时间复杂度为O(n)O(n)

空间复杂度:使用递归,根据栈深度,空间复杂度为O(logn)O(logn),最坏情况为O(n)O(n)

方法二:中序遍历的方法

解题思路

本题目也可也使用中序遍历的方法,二叉搜索树的中序遍历序列一定是从小到大的,因此在中序遍历过程中,如果出现前一个值大于后一个的情况,则说明不满足二叉搜索树。

解题代码

class Solution {
public:
    bool isValidBST(TreeNode* root)
    {
        stack<TreeNode*> st;//初始化
        TreeNode* p=root;
        int pre=INT_MIN;
        while(!st.empty()||p!=nullptr)
        {//栈实现中序遍历
            while(p)
            {
                st.push(p);//入栈
                p=p->left;//遍历左儿子
            }
            p=st.top();
            st.pop();//弹栈
            if(pre>p->val)//中序序列中前一个值大于后一个值,则返回false
                return false;
            pre=p->val;
            p=p->right;//遍历右儿子
        }
        return true;
    }
};

复杂度分析

时间复杂度:一次遍历,因此时间复杂度为O(n)O(n)

空间复杂度:使用栈需要额外的内存空间,因此空间复杂度为O(n)O(n)

算法 文章被收录于专栏

算法题的题解以及感受

全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
序&nbsp;朋友们,好久不见。&nbsp;笔者在过去消失的五个月里被困在情绪牢笼中过的相当煎熬,一度丢失自己,觉得整个世界都是昏暗的。&nbsp;庆幸的是靠着自己纯硬扛也是走出来了。表达欲再度回归,所以真的很开心还有机会能在再和大家见面。&nbsp;破碎秋招&nbsp;抑郁情绪的引爆点必然是秋招期间遭受的打击了,从去年九月份腾讯转正被告知失败之后就开始疯狂投递简历,每天都在经历:简历挂、一面挂、二面挂、三面挂、HR面挂,每天睁开眼就被无所适从的挫败感包围。&nbsp;秋招的特点是即便流程走到最后一步也不一定会&nbsp;offer,因为还需要进入大池子进行横向对比,俗称泡池子,而这一泡我的大多数面试流程到后面就没了后文,这一度让我感觉非常绝望。我深知自己学历并...
SoNiC_X:我已经工作快2年了,当时高考没考好没去到想去的学校,觉得天要塌了;校招找不到工作,觉得天要塌了;现在工作觉得看不到未来,觉得天要塌了;最近最大的感悟就是:天会一直塌,但是生活也会一直继续下去,还是要调整好自己的心态,不要因为一时的困难把自己困住,要记住完蛋的日子永远在后头
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务