Validate Binary Search Tree

递归法,定义辅助函数,参数为(root, lower, upper),对于每个子树,首先判断根节点满足lower和upper bound,然后根据root->val重新设定lower和upper bound,并递归调用辅助函数。代码如下:

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        return isvalid(root, INT_MIN, INT_MAX);
    }
    
    bool isvalid(TreeNode *root, int lower, int upper) {
        if(!root) return true;
            
        return (root->val > lower) 
            && (root->val < upper)
            && isvalid(root->left, lower, root->val)
            && isvalid(root->right, root->val, upper);
    }
};

迭代法,使用树的Inorder-traversal。

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        if(root == NULL) return true;
        
        TreeNode *cur = root, *p = NULL;
        int prev = INT_MIN;
        bool ret = true;
        while(cur != NULL)
        {
            if(cur->left == NULL)
            {
                if(cur->val <= prev)
                    ret = false;
                prev = cur->val;
                cur = cur->right;   
            }
            else
            {
                p = cur->left;
                while(p->right != NULL && p->right != cur)
                    p = p->right;
                
                if(p->right == NULL)
                {
                    p->right = cur;
                    cur = cur->left;
                }
                else
                {
                    if(cur->val <= prev)
                        ret = false;
                    prev = cur->val;
                    p->right = NULL;
                    cur = cur->right; 
                }
            }
        }
        return ret;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值