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 false; } List<Integer> inorderList = new ArrayList<>(); inOrder(root, inorderList); List<Integer> sortedList = new ArrayList<>(inorderList); sortedList.sort(null); return inorderList.equals(sortedList); } public void inOrder(TreeNode root, List<Integer> list) { if (root == null) { return; } inOrder(root.left, list); list.add(root.val); inOrder(root.right, list); } }
该代码使用的编程语言是Java。
该题考察的知识点是二叉树的遍历和判断二叉搜索树(BST)的性质。
代码的解释如下:
- 首先定义了一个
TreeNode
类,用于表示二叉树的节点。 - 接着定义了一个
Solution
类,包含了一个isValidBST
方法,用于判断给定的二叉树是否是有效的二叉搜索树。 isValidBST
方法内部调用了inOrder
方法,进行中序遍历,将节点值存储在列表中。- 中序遍历会按照左子树、根节点、右子树的顺序遍历二叉树。
- 创建了一个
inorderList
列表来存储中序遍历的结果,然后复制一份到sortedList
列表中,并对sortedList
进行排序。 - 最后,判断
inorderList
与sortedList
是否相等,如果相等,则说明给定二叉树是有效的二叉搜索树,返回true
;否则,返回false
。