LC98. Validate Binary Search Tree
给定一个二叉树,判断它是否为二叉搜索树
方法一:BST的中序遍历结果是一个严格递增的序列,因此中序遍历的时候保存上一个遍历到的节点,当前节点的值必须大于上一个节点的值
class Solution { public: bool isValidBST(TreeNode* root) { TreeNode* prev = NULL; return validate(root, prev); } bool validate(TreeNode* node, TreeNode* &prev) { if (node == NULL) return true; if (!validate(node->left, prev)) return false; if (prev != NULL && prev->val >= node->val) return false; prev = node; return validate(node->right, prev); } };
方法二:从上到下遍历,保存父节点和爷节点的值,这两个节点的值决定了当前节点值的取值范围。
bool isValidBST(TreeNode* root) { return isValidBST(root, NULL, NULL); } bool isValidBST(TreeNode* root, TreeNode* minNode, TreeNode* maxNode) { if(!root) return true; if(minNode && root->val <= minNode->val || maxNode && root->val >= maxNode->val) return false; return isValidBST(root->left, minNode, root) && isValidBST(root->right, root, maxNode); }