题解 | #判断是不是二叉搜索树#
判断是不是二叉搜索树
https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b
利用递归,返回的结果需要包含以下几点:
- 当前节点的左孩子(若有) 小于 当前节点值,当前节点值 小于右孩子值(若有)
- 当前节点需要大于左子树中最大的值(即当前节点左孩子的右子树,即中序遍历中当前节点的前一个结点),当前节点需要小于右子树中最小的值(即当前节点右孩子的左子树,即中序遍历中当前节点后一个节点)
- 返回左子树是不是二叉排序树、右子树是不是二叉排序树
将以上的几点取 &,得出结果即当前节点是否符合
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ public boolean isValidBST (TreeNode root) { // write code here if (root == null) { return true; } boolean flag = true; if (root.left != null) { flag = root.left.val < root.val; TreeNode temp = root.left; while (temp.right != null) { temp = temp.right; } flag = flag & temp.val < root.val; } if (root.right != null) { flag = flag && root.right.val > root.val; TreeNode temp = root.right; while (temp.left != null) { temp = temp.left; } flag = flag & temp.val > root.val; } return flag & isValidBST(root.left) & isValidBST(root.right); } }#二叉排序树#