【程序员面试金典】04.05. 合法二叉搜索树(递归或中序遍历)

1.题目

实现一个函数,检查一棵二叉树是否为二叉搜索树。

示例 1:
输入:
    2
   / \
  1   3
输出: true
示例 2:
输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.题解

递归:

class Solution
{
public:
    bool isValidBST(TreeNode* root)
    {
        return isValidBST(root,NULL,NULL);
    }

    bool isValidBST(TreeNode* root,TreeNode* min,TreeNode* max)
    {
        if(root==NULL)
        {
            return true;
        }
        if(min!=NULL&&root->val<=min->val)
        {
            return false;
        }
        if(max!=NULL&&root->val>=max->val)
        {
            return false;
        }
        return isValidBST(root->left,min,root)&&isValidBST(root->right,root,max);
    }
};

链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/solution/pan-duan-bsthe-fa-xing-by-life-34/

中序遍历:

中序遍历,每次判断当前节点和上一节点是否满足顺序关系,若有不满足则直接返回false

class Solution
{
public:
    bool isValidBST(TreeNode* root)
    {
        stack<TreeNode*> sta;
        if(root==NULL) return true;
        TreeNode* currNode = NULL;
        while(!sta.empty()|| root!=NULL)
        {
            while(root!=NULL)
            {
                sta.push(root);
                root = root->left;
            }

            root = sta.top();
            sta.pop();
            if(currNode!=NULL && (currNode->val>=root->val)) return false;
            currNode = root;
            root = root->right;

        }
        return true;
    }
};

链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/solution/fei-di-gui-zhong-xu-bian-li-dfs-by-brucechen135/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值