1.题目
实现一个函数,检查一棵二叉树是否为二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
递归:
class Solution
{
public:
bool isValidBST(TreeNode* root)
{
return isValidBST(root,NULL,NULL);
}
bool isValidBST(TreeNode* root,TreeNode* min,TreeNode* max)
{
if(root==NULL)
{
return true;
}
if(min!=NULL&&root->val<=min->val)
{
return false;
}
if(max!=NULL&&root->val>=max->val)
{
return false;
}
return isValidBST(root->left,min,root)&&isValidBST(root->right,root,max);
}
};
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/solution/pan-duan-bsthe-fa-xing-by-life-34/
中序遍历:
中序遍历,每次判断当前节点和上一节点是否满足顺序关系,若有不满足则直接返回false
class Solution
{
public:
bool isValidBST(TreeNode* root)
{
stack<TreeNode*> sta;
if(root==NULL) return true;
TreeNode* currNode = NULL;
while(!sta.empty()|| root!=NULL)
{
while(root!=NULL)
{
sta.push(root);
root = root->left;
}
root = sta.top();
sta.pop();
if(currNode!=NULL && (currNode->val>=root->val)) return false;
currNode = root;
root = root->right;
}
return true;
}
};
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/solution/fei-di-gui-zhong-xu-bian-li-dfs-by-brucechen135/