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);

	}
};

 

上一篇:转载:【TP5.0】TP5 Validate 验证规则


下一篇:Struts基于validate方法手动完成输入校验