98. 验证二叉搜索树

题目链接:98. 验证二叉搜索树 - 力扣(LeetCode)

如果是二叉搜索树的话,中序遍历将其转换为数组后数组有序

class Solution {
public:
	//创建数组
	vectorv;
	//中序遍历二叉树,把数据插入到数组中
	void f(TreeNode* root) {
		if (root == NULL)return;
		f(root->left);
		v.push_back(root->val);
		f(root->right);
	}
	bool isValidBST(TreeNode* root) {
		v.clear();
		f(root);
		//遍历数组,判断是否为升序
		for (int i = 1; i < v.size(); i++) {
			if (v[i] <= v[i - 1])return false;
		}
		return true;
	}
};

也可以直接在中序遍历的时候比较,创建一个指针记录上一个数据的大小,通过中序遍历,两两比较元素的大小,判断是否为升序

不把指针设为 int 类型是因为数据可能有 int 类型最小值或 long long 类型最小值

class Solution {
public:
	//创建一个指针记录上一个数据的大小
	TreeNode* pre = NULL;

	bool isValidBST(TreeNode* root) {
		if (root == NULL)return true;

		bool left = isValidBST(root->left);

		//对节点的处理,判断是否为升序
		if (pre != NULL && pre->val >= root->val)return false;
        //更新指针
		pre = root;

		bool right = isValidBST(root->right);
		return left && right;
	}
};

初学者,见解不足,如有错误请指出

你可能感兴趣的:(#,二叉树,算法)