题目
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:
2 / \ 1 3Binary tree
[2,1,3]
,
return true.
Example 2:
1 / \ 2 3Binary tree
[1,2,3]
,
return false.翻译
给定二叉树,确定它是否是有效的二叉搜索树(BST)。
假设BST定义如下:
- 节点的左子树只包含密钥小于节点密钥的节点。
- 节点的右子树仅包含具有大于节点密钥的密钥的节点。
- 左和右子树也必须是二叉搜索树。
分析
由题意可以联想到递归和中序遍历。
下面贴上找到的比较好的一种方法
/** * 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 isValidBST(TreeNode* root) { if (!root) return true; vector<int> vals; inorder(root, vals); for (int i=0; i<vals.size()-1; ++i) { //判断数组是否满足从大到小的顺序,从而验证该树是否是有效的二叉搜索树 if (vals[i] >= vals[i+1]) return false; } return true; } void inorder(TreeNode *root, vector<int> &vals) { //中序遍历递归 if (!root) return; inorder(root->left, vals); vals.push_back(root->val); inorder(root->right, vals); } };