LeetCode:98.验证二叉搜索树

思路一、

中序遍历,将树从大到小排序,然后一个循环比较前后大小,O(n)

在这里插入图片描述

//超出边界检验
bool checkOut(int v, vector<int> a) {
	return v >= a.size();
}
//数组转化成树
bool arrayToTree(vector<int> arr, int i, TreeNode* &root) {
	if(arr[i] != -1 && !checkOut(i, arr)) {
		root = new TreeNode;
		root->val = arr[i]; 
		arrayToTree(arr, 2 * i + 1, root->left);
		arrayToTree(arr, 2 * i + 2, root->right);	
	}
}

class Solution {
	public:	
		bool check(vector<int> v) {
			int i = 0;
			bool count = true; 
			while(i < v.size() - 1) {
				cout << v[i] << endl;
				if(v[i] >= v[i + 1]) {
					count = false;
					break;
				}
				i++;
			}
			return count;
		}
		bool isValidBST(TreeNode* root) {
			stack<TreeNode*> S;
			TreeNode* temp = root;
			vector<int> V;
			while(!S.empty() || temp != NULL) {
				while(temp != NULL) {
					S.push(temp);
					temp = temp->left;
				}
				if(!S.empty()) {
					temp = S.top();
					S.pop();
					V.push_back(temp->val);
					temp = temp->right;
				}
			} 
			return check(V);
    	}	
};

思路二、

中序遍历+递归(转自LeetCode用户:缘)

在这里插入图片描述

class Solution{
    public:
        int* last = NULL;
        bool isValidBST(TreeNode* root) {
            if(root) {
                if(!isValidBST(root->left)) return false;
                if(last && *last >= root->val) return false;
                last = &root->val;
                if(!isValidBST(root->right)) return false;
                return true;
            } else return true;
        }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值