Validate Binary Search Tree -- LeetCode
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
思路:二叉搜索树如果按照in-order traversal来遍历的话,所有节点会按照从小到大的顺序被遍历。
Pre-order
- Display the data part of the root (or current node).
- Traverse the left subtree by recursively calling the pre-order function.
- Traverse the right subtree by recursively calling the pre-order function.
In-order
- Traverse the left subtree by recursively calling the in-order function.
- Display the data part of the root (or current node).
- Traverse the right subtree by recursively calling the in-order function.
In a BST, in-order traversal retrieves data in sorted order.
Post-order
- Traverse the left subtree by recursively calling the post-order function.
- Traverse the right subtree by recursively calling the post-order function.
- Display the data part of the root (or current node).
1 class Solution { 2 public: 3 bool validate(TreeNode* root, TreeNode* &pre) 4 { 5 if (root == NULL) return true; 6 if (!validate(root->left, pre)) return false; 7 if (pre != NULL && pre->val >= root->val) return false; 8 pre = root; 9 return validate(root->right, pre); 10 } 11 bool isValidBST(TreeNode* root) { 12 TreeNode* pre = NULL; 13 return validate(root, pre); 14 } 15 };
代码中,我用了一个全局指针pre来记录in-order traversal过程中的上一个节点。如果上一个节点的值比当前节点的值要大或者相等,则不是BST。