Leetcode 098 Validate Binary Search Tree(递归)

题目连接:Leetcode 098 Validate Binary Search Tree

解题思路:每个结点要维护当前子树结点中的最小值,和最大值。然后如果左结点不为空,递归判定左子树,并且左子树中的最大值不能大于当前值。右子树同理,但是最小值不能小于当前值。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
	public:
		bool validBST(TreeNode* root, int& minVal, int& maxVal) {
			minVal = maxVal = root->val;

			int tmpMinVal, tmpMaxVal;
			if (root->left != NULL) {
				bool left =  validBST(root->left, tmpMinVal, tmpMaxVal);
				if (left == false || tmpMaxVal >= root->val)
					return false;
				minVal = min(minVal, tmpMinVal);
			}
			if (root->right != NULL) {
				bool right = validBST(root->right, tmpMinVal, tmpMaxVal);
				if (right == false || tmpMinVal <= root->val)
					return false;
				maxVal = max(maxVal, tmpMaxVal);
			}
			return true;
		}

		bool isValidBST(TreeNode* root) {
			if (root == NULL) return true;
			int minVal, maxVal;
			return validBST(root, minVal, maxVal);
		}
};

猜你喜欢

转载自blog.csdn.net/u011328934/article/details/80716175