给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
思路
由于数据范围限制了二叉搜索树中的结点值的取值范围,因此上述取值范围可以用闭区间表示。对于二叉搜索树的每一个子树(包括原二叉搜索树本身),如果其结点值的取值范围是 [lowerBound,upperBound],子树的根结点值为 mid,则该子树的左子树和右子树的结点值取值范围分别是 [lowerBound,mid−1] 和[mid+1,upperBound]。
判断给定的二叉树是否是二叉搜索树,可以通过判断给定的二叉树的每一个子树是否是二叉搜索树,即每一个子树是否都满足结点值在特定取值范围内。从根结点开始遍历二叉树,对于每个结点,判断其子树的结点值是否在特定取值范围内。
对于其余情况,根据当前子树的取值范围和当前结点值确定左子树和右子树的取值范围,对左子树和右子树调用递归。
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
//精度问题,设置为long类型
public class Solution {
public bool IsValidBST(TreeNode root) {
return IsValidBST(root, long.MinValue, long.MaxValue);
}
public bool IsValidBST(TreeNode node, long lowerBound, long upperBound)
{
if(node == null)
{
return true;
}
if(node.val < lowerBound || node.val > upperBound)
{
return false;
}
return IsValidBST(node.left, lowerBound, (long) node.val - 1) &&
IsValidBST(node.right, (long) node.val +1, upperBound);
}
}
原文地址:https://blog.csdn.net/Theolulu/article/details/134726321
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_28638.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。