题目
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.
Example 1:
1 2 3 4 5 6
| 2 / \ 1 3
Input: [2,1,3] Output: true
|
Example 2:
1 2 3 4 5 6 7 8 9
| 5 / \ 1 4 / \ 3 6
Input: [5,1,4,null,null,3,6] Output: false Explanation: The root node's value is 5 but its right child's value is 4.
|
题解
中序遍历并检查是否为严格递增序列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { private: vector<int> m; void dfs(TreeNode* root) { if(root==NULL) return; dfs(root->left); m.push_back(root->val); dfs(root->right); } public: bool isValidBST(TreeNode* root) { dfs(root); for(int i=1;i<m.size();i++) { if(m[i]<=m[i-1]) return false; } return true; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class Solution { private: int tmp,flag=0; bool dfs(TreeNode* root) { if(root==NULL) return true; if(!dfs(root->left)) return false; if(flag!=0&&root->val<=tmp) return false; tmp=root->val;++flag; if(!dfs(root->right)) return false; return true; } public: bool isValidBST(TreeNode* root) { return dfs(root); } };
|