二叉搜索树中搜索特定值
问题描述
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。详见leetcode700
代码实现
public TreeNode searchBST ( TreeNode root, int val) { if ( root== null ) { return null ; } if ( root. val == val) { return root; } else if ( root. val< val) { return searchBST ( root. right, val) ; } else { return searchBST ( root. left, val) ; } }
验证二叉树是否是二叉搜索树
问题描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
代码实现
public boolean isValidBST ( TreeNode root) { return isValidBST ( root, Integer . MIN_VALUE , Integer . MAX_VALUE ) ; } public boolean isValidBST ( TreeNode root, int low, int high) { if ( root== null ) { return true ; } if ( root. val <= low || root. val >= high) { return false ; } return isValidBST ( root. left, low, root. val) && isValidBST ( root. right, root. val, high) ; }
下面的代码是我第一次提交的代码,可以通过部分测试用例,大家可以看下存在什么问题
public boolean isValidBST ( TreeNode root) { if ( root. left== null && root. right== null ) { return true ; } if ( root. left!= null && root. right== null ) { return root. left. val < root. val && isValidBST ( root. left) ; } if ( root. right!= null && root. left== null ) { return root. right. val > root. val && isValidBST ( root. right) ; } return root. left. val < root. val && root. right. val > root. val && isValidBST ( root. left) && isValidBST ( root. right) ;
}