题目
题目解析
从左下角往右上角看,很明显的二叉搜索树,对于每个根结点,比它小的数存在于它的左边,比它大的存在于右边。
代码
时间复杂度分析:
二叉搜索树的时间复杂度和它的高度有关–由于树的高度和整个树的结点成h=log(N)的关系,所以这道题的时间复杂度应该是O(log(m*n))。
class Solution {
public:
bool res = false;
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int n = matrix.size();
int m = matrix[0].size();
binarySearchTree(matrix,target,n-1,0);
return res;
}
private://从左下角看,可以看成一棵二叉搜索树。
void binarySearchTree(vector<vector<int>>&matrix,int target,int left,int right){
//对越界的处理
if(left<0||right>=matrix[0].size())
return;
if(matrix[left][right]==target){
res = true;
return;
}
if(matrix[left][right]>target){
//若根结点大于target,往左结点走
binarySearchTree(matrix,target,left-1,right);
}else{
binarySearchTree(matrix,target,left,right+1);
}
}
};