给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左
子树
只包含 小于 当前节点的数。 - 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3] 输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。
思路
中序遍历存入数组,判断数组是否升序。
代码
递归
vector<int> res;
void travel(TreeNode* root)
{
if(root == nullptr)
return;
travel(root->left);
res.push_back(root->val);
travel(root->right);
}
bool isValidBST(TreeNode* root) {
travel(root);
for(auto iter = res.begin(); iter != res.end()-1;++iter)
{
if(*iter >= *(iter+1))
return false;
}
return true;
}
非迭代法
bool isValidBST(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
TreeNode *node = root;
while(!st.empty() || node != nullptr)
{
while(node != nullptr)
{
st.push(node);
node = node->left;
}
node = st.top();
st.pop();
res.push_back(node->val);
node = node->right;
}
for(auto iter = res.begin(); iter != res.end()-1;++iter)
{
if(*iter >= *(iter+1))
return false;
}
return true;
}