validate-binary-search-tree

https://www.nowcoder.com/practice/fd7f880072914464a13b89af242c0ce5?tpId=46&tqId=29080&tPage=3&rp=3&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

思路一: 二叉搜索树中序遍历的结果是升序的, 把二叉树中序遍历一遍,看二叉树是否是升序的,如果不是的升序话那么该二叉树就不是二叉搜索树,否则就是二叉搜索树。


class Solution {
public:
	vector<int>res;//储存中序遍历结果
    bool isValidBST(TreeNode *root) {
        if(root == nullptr)
			return true;

		traverse(root);//中序遍历

		int len = res.size();
		for(int i = 0; i < len - 1; i++){//检验数组是不是升序
			if(res[i] >= res[i +1])
				return false;
		}
		return true;
    }

	void traverse(TreeNode * root){//中序遍历
		if(root){
			traverse(root->left);
			res.push_back (root -> val);
			traverse(root -> right);

		}
	}

};

思路二:根据每个节点的值的上下限来判断。比如左孩子节点的值的上限就是小于根节点,右孩子的下限就是大于根节点的值


class Solution {
public:
    bool isValidBST(TreeNode *root) {
        if(root == nullptr)//测题的时候发现空树的答案是二叉搜索树的。。
			return true;

		return solve(root, INT_MIN, INT_MAX);

    }
	//low, high分别表示根节点的上下限。
	bool solve(TreeNode * root, int low, int high){
		if(root == nullptr)
			return true;
		//根节点的值域不符合要求
		if(root -> val <= low || root -> val >= high)
			return false;
		//测试左孩子和右孩子
		return solve(root -> left ,low, root->val) && 
			solve(root -> right, root -> val, high);

	}
};

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值